0

我收到一条错误消息,说局部变量可能尚未初始化,或者无法解析为 catch 所在的变量。我应该如何解决这个问题?基本上,我希望我的程序接受一些数字,然后停止并显示一些答案。

import java.util.Scanner;

public class math2{
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Integer Values\nEnter a Non-Integer When Finished\n");

      int x = input.nextInt();
      int max = x;
      int min = x;
      int sum = x;
      double average = 0;

    try
    {
    int amount = 1;
    while(true)
    {
        x = Integer.parseInt(input.next());
        sum = sum + x;
        amount++;
        average = (double)sum/amount;

            if (x > max) {
                max = x;
            } else if (x < min) {
                min = x;
            }
    }
    }catch(NumberFormatException e){
    System.out.println("The Maximum Value is " + max);
    System.out.println("The Minimum Value Is " + min);
    System.out.println("The Sum Is " + sum);
    System.out.println("The Average Is " + average);}
    }

}

4

5 回答 5

6

在 try 块之前声明下面的变量,以便这些在 catach 块中也可用。
并初始化double average为一些默认值。

  String x = input.next();
  int y = Integer.parseInt(x);*emphasized text*
  int max = y;
  int min = y;
  int sum = 0;
  double average = 0;

更新

在您进行有问题的编辑后,我注意到 如果您将非整数作为第一个输入InputMismatchException,您会得到 。 为此,您可以捕获该异常以正常退出程序。 替换此代码代替 您的代码语句。


int x = input.nextInt();

    int x = 0;
    try{
        x = input.nextInt();
    }catch(InputMismatchException ime){
       //you cam use either of one statemnet.I used return statement
        return ;
        //System.exit(0);
    }    
于 2013-07-30T07:07:35.183 回答
2

首先,定义块外的变量try。如果您在 内定义它try{},它将在块内try{...}和不可见的范围内catch(){}

其次,你需要提供一些初始值给average. 局部变量永远不会使用默认值初始化。

double average = Double.NaN;

如果变量while()由于异常而从未在循环内初始化怎么办?

于 2013-07-30T07:07:05.417 回答
1

因为您还没有初始化变量“平均”。另外,我建议您在 try catch 块之外声明变量

于 2013-07-30T07:07:36.383 回答
0

在 try 块之前声明 max、min、average、sum 变量。这些变量对于 try 块是本地的。如果您想在 catch 块中使用这些变量,请将该变量作为类成员。

于 2013-07-30T07:12:00.280 回答
0
import java.util.Scanner;

public class math2{
static double average;
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Integer Values\nEnter a Non-Integer When Finished\n");

    try
    {

    String x = input.next();
    int y = Integer.parseInt(x);
    int max = y;
    int min = y;
    int sum = 0;
    int amount = 0;


    while(true)
    {
        sum = sum + y;
        y = Integer.parseInt(input.next());

        amount++;
        average = (double)sum/amount;

            if (y > max) {
                max = y;
            } else if (y < min) {
                min = y;
            }
    }
    }catch(NumberFormatException e){
    System.out.println("The Maximum Value is " + max);
    System.out.println("The Minimum Value Is " + min);
    System.out.println("The Sum Is " + sum);
    System.out.println("The Average Is " + average);}
    }

}

看到你在类级别声明变量,编译器会为你分配一个默认值......但是对于局部变量,你需要分配它,正如其他帖子中提到的那样

于 2013-07-30T07:12:32.853 回答