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

Java变量不会在if语句中初始化?,java,Java,我已经初始化并声明了变量“average”。我不明白它为什么不能编译。这是否与它在if-else中的事实有关?我已经试过了 “| | null”这两个选项都不适用。怎么办 // declare variables Scanner keyboard = new Scanner (System.in); String given; String middle; String sur; String truefalse; boolean bool;

我已经初始化并声明了变量“average”。我不明白它为什么不能编译。这是否与它在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);  
    }   
为什么编译器会这样说
“变量平均值可能尚未初始化”

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

double average = null;
或者,您也可以在
if
块中初始化
average
,因为如果
if
块运行而
else
块不运行,那么在一天结束时,您仍然会有一个初始化的
average
,编译器很高兴:)


此外,最后一个重要的经验法则是,对于ints、字符、booleans等,需要初始化
average
。 编译器正在抱怨,因为您的代码可能会或永远不会到达
else
块。但是,如果在未初始化时使用
average
,则会出现错误

double average = null;
或者,您也可以在
if
块中初始化
average
,因为如果
if
块运行而
else
块不运行,那么在一天结束时,您仍然会有一个初始化的
average
,编译器很高兴:)

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

  • 您声明了变量,但没有严格初始化它。只有当程序逻辑规定行
    平均=((exam1+exam2+exam3)/3)时,才初始化被点击。如果
    truefalse==“true”
    ,则不会发生这种情况

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

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

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

第一种选择更好。它使您的代码更干净、更符合逻辑,从而更易于维护。第二个选项是隐式的,而不是显式的。您可能不必亲自浏览逻辑来了解它的工作原理。

  • 您声明了变量,但没有严格初始化它。只有当程序逻辑规定行
    平均=((exam1+exam2+exam3)/3)时,才初始化被点击。如果
    truefalse==“true”
    ,则不会发生这种情况

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

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

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


第一种选择更好。它使您的代码更干净、更符合逻辑,从而更易于维护。第二个选项是隐式的,而不是显式的。您可能不必亲自浏览逻辑来了解它的工作原理。

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

双平均=0

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


此外,在声明局部变量时初始化该变量始终是一种良好的做法。

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

双平均=0

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


此外,在声明局部变量时初始化该变量始终是一种良好的做法。

您不应该编写
truefalse==“true”
,您应该编写
truefalse.equals(“true”)
。您必须在声明位置初始化变量avarage,或者,您可以指定一些默认值(可能是0)要平均if块中的变量…您是否尝试过初始化它<代码>双平均=0使用类似这样的东西。。。如果(truefalse==“true”){bool=true;exam1=keyboard.nextInt();exam2=keyboard.nextInt();exam3=keyboard.nextInt();average=0;}否则{average=((exam1+exam2+exam3)/3);}我想你没有包括你的整个程序。编译器抱怨的是哪一行?你能告诉我们吗?你不应该写
truefalse==“true”
,你应该写
truefalse.equals(“true”)
。你必须在声明位置初始化变量avarage,或者,你可以给if块内的平均变量指定一些默认值(可能是0)…你试过初始化它吗<代码>双平均=0使用类似这样的东西。。。if(truefalse==“true”){bool=true;exam1=keyboard.nextInt();exam2=keyboard.nextInt()