Java变量不会在if语句中初始化?
我已经初始化并声明了变量“average”。我不明白它为什么不能编译。这是否与它在if-else中的事实有关?我已经试过了 “| | null”这两个选项都不适用。怎么办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;
// 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()