Java变量不会在if语句中初始化?

时间:2013-10-21 05:38:31

标签: java

我已初始化并声明变量“average”。我不明白为什么它不会编译。它是否与其他情况有关?我已经试过了 “|| null”,这也没有。怎么办?

 // declare variables
    Scanner keyboard = new Scanner (System.in);
    String given;
    String middle;
    String sur;
    String truefalse;
    boolean bool;
    int exam1;
    int exam2;
    int exam3;
    double average;

    // get input
    System.out.println("***************  Grade Computer *************");
    System.out.println("Enter the student's first name: ");
    given = keyboard.nextLine();

    System.out.println( "Enter the student's middle initial: ");
    middle = keyboard.nextLine();

    System.out.println( "Enter the student's last name: ");
    sur = keyboard.nextLine();

    System.out.println( "Enter EXAM 1 Grade: ");
    exam1 = keyboard.nextInt();

    System.out.println( "Enter EXAM 2 Grade: ");
    exam2 = keyboard.nextInt();

    System.out.println( "Enter EXAM 3 Grade: ");
    exam3 = keyboard.nextInt();

    keyboard.nextLine();
    System.out.println( "Bonus work completed [true/false]");
    truefalse = keyboard.nextLine();

    // adjust exam scores if necesssary
    if (truefalse == "true")
    {
        bool = true;
        exam1 = keyboard.nextInt();
        exam2 = keyboard.nextInt();
        exam3 = keyboard.nextInt();
    }
    else
    {
        average = ((exam1+exam2+exam3)/3);  
    }   

为什么编译器说 “可变平均值可能尚未初始化”?

3 个答案:

答案 0 :(得分:2)

您需要初始化average。 编译器抱怨,因为您的代码可能会或可能不会到达else块。但是,如果在未初始化时使用average,则会出现错误。

double average = null;

或者,您也可以在average块中初始化if,因为如果if块运行且else不运行,您仍然会有在一天结束时初始化average并且编译器很高兴:)。

if (truefalse == "true")
{
    average = //something;
    bool = true;
    exam1 = keyboard.nextInt();
    exam2 = keyboard.nextInt();
    exam3 = keyboard.nextInt();
}
else
{
    average = ((exam1+exam2+exam3)/3);  
}   

另外,作为最后一点,一个好的经验法则是对{t 1}}使用.equals(),对于整数,字符,布尔值等使用String

答案 1 :(得分:2)

  • 您声明了您的变量但没有严格初始化它。如果程序的逻辑指示行average = ((exam1+exam2+exam3)/3);被命中,则初始化。如果truefalse == "true"

  • ,则不会发生这种情况
  • 为了让Java编译它,你可以做两件事之一。

    1. 在声明变量时将变量初始化为某个默认值,例如double average = 0;

    2. 确保没有逻辑路径排除变量初始化的可能性。也就是说,无论发生了什么,它都会被初始化。

第一种选择更好。它使您的代码更清晰,更符合逻辑,从而更易于维护。第二个选项比显式更隐式。你可能不应该自己走过逻辑,看看它是如何工作的。

答案 2 :(得分:2)

您可以在声明时将双变量平均值初始化为0.

double average = 0;

此特定错误的原因是您尝试在if-else块中初始化变量。如果condition不为true,则不会初始化变量。如果您在程序中进一步使用该变量,则会出现运行时错误。这就是为什么Java编译器会让你知道变量可能未初始化的可能性

此外,在声明局部变量时初始化局部变量始终是一个好习惯。