我只是不明白为什么这不起作用:
public class HelloWorld {
public static void main(String []args) {
int a = 9;
boolean isOdd;
if (a != 0) {
isOdd = false;
} else if (a == 0) {
isOdd = true;
}
if (isOdd == false) {
System.out.print("Boolean is false");
}
}
}
HelloWorld.java:15:错误:变量isOdd可能没有被初始化
如果(isOdd==false){
因为
boolean isOdd;
if(a != 0){
isOdd = false;
} else if(a == 0){
isOdd = true;
}
有一个控制流,其中isOdd保持未分配:编译器不认为条件排除了第二个其他如果之外的第三个路径。
boolean isOdd;
if(a != 0){
isOdd = false;
} else {
isOdd = true;
}
或最好:
boolean isOdd = a == 0;
if( ! isOdd ) {
System.out.print("isOdd is false");
}
大多数人认为,将布尔值与真或假进行比较是多余的。
boolean isOdd;
if(a != 0){
isOdd = false;
} else if(a == 0){
isOdd = true;
}
严格按照语法,上面的if语句有第三条执行路径,绕过了两个“then”分支。编译器不使用符号表达式操作来确定a=0 | | a==0
的计算结果为true,因此永远不会采用第三条路径,并且无论发生什么情况,都会为isOdd分配一个值。因此,这种说法应该是正确的
boolean isOdd;
if(a != 0){
isOdd = false;
} else {
isOdd = true;
}
编译器不认为a!=0
和a==0
是互斥的条件-或者说,它不考虑两个是否互斥来计算发生了什么。所以您可以通过将代码更改为:
if(a != 0) {
isOdd = false;
} else {
isOdd = true;
}
这时你最好写:
boolean isOdd = a == 0;
这不是一个很好的奇怪测试,但它至少可以编译。。。
基本上,每当你收到这样一条消息,这意味着你的代码中有某种编译器认为可能合理的方式,但它不会初始化变量。你有:
if (condition1) {
// Initialize variable
} else if (condition2) {
// Initialize variable
}
因此,如果
condition1
和condition2
都不是真的,那么变量将不会初始化。编译器真正关心这里的条件的唯一方式是,对条件求值初始化变量,或者对条件求值是一个编译时常量表达式(在这种情况下,它可以假设该分支是或不是,取决于该常量表达式的值)。
问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),所以会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值
我的编译器不会有它(现在怎么办?我必须完全重写整个应用程序吗? 要查看编译器拒绝的行,请执行系统搜索。出来println(celsius输出“C”); 当试图编译时,编译器告诉我,“变量celsiusOutput可能尚未初始化。”编译器对另外两个输出项中的任何一个都不说同样的话:华氏输出和开尔文输出。
问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),因此会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值
问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事
我不知道这段代码有什么问题,也不知道为什么会出现错误: 变量isPrime可能尚未初始化 这是完整的代码:
我创建了包含构造函数和toString方法的类主管。但是,当我试图打印数组的索引时,出现了一个错误,“变量svArray可能尚未初始化。我该如何解决这个问题?”?