局部变量未在catch函数中初始化

时间:2013-07-30 07:05:27

标签: java

我收到一个错误,说局部变量可能尚未初始化,或者无法解析为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);}
    }

}

5 个答案:

答案 0 :(得分: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);
    }    

答案 1 :(得分:2)

首先,在try块旁边定义变量。如果您在try{}内定义它,它将限定在try{...}内,而catch(){}块则不可见。

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

double average = Double.NaN;

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

答案 2 :(得分:1)

因为您尚未初始化变量'average'。另外,我建议你在try catch块之外声明变量

答案 3 :(得分:0)

在try块之前声明max,min,average,sum变量。那些变量是本地的 try block ..如果你想在catch块中使用,那就把变量作为类成员。

答案 4 :(得分: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);}
    }

}

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