1

我已经初始化并声明了变量“平均值”。我不明白为什么它不会编译。这是否与它在 if else 中的事实有关?我已经尝试过“|| 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);  
    }   

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

4

3 回答 3

2

您需要初始化average. 编译器抱怨是因为您的代码可能会或可能不会到达该else块。然而,如果你average在它没有被初始化的时候使用它,你会得到一个错误。

double average = null;

或者,您也可以averageif块中初始化,因为如果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);  
}   

此外,作为最后一点,一个好的经验法则是.equals()用于任何整数String==字符、布尔值等。

于 2013-10-21T05:45:22.580 回答
2
  • 您声明了变量,但没有严格初始化它。只有当您的程序逻辑指示该行被命中时,它才会被初始化。average = ((exam1+exam2+exam3)/3);如果truefalse == "true".

  • 为了让 Java 编译它,你可以做两件事之一。

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

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

第一个选项更好。它使您的代码更清晰,更合乎逻辑,因此更易于维护。第二个选项比显式更隐含。您可能不必自己遍历逻辑来了解它是如何工作的。

于 2013-10-21T05:49:08.297 回答
2

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

双平均=0;

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

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

于 2013-10-21T05:50:07.467 回答