以下代码将错误消息显示为“线程中的异常”主“java.lang.Error:未解决的编译问题: 局部变量答案可能尚未初始化'。
package firstproject;
import java.util.Scanner;
public class calculator {
public static void main(String args[]){
double firstno, secondno, answer;
int choice;
Scanner add = new Scanner(System.in);
System.out.println("What r u trying to do??");
System.out.println("1 - add");
System.out.println("2 - substract");
System.out.println("3 - multiplication");
System.out.println("4 - division");
choice = add.nextInt();
System.out.print("Enter your 1st number: ");
firstno = add.nextDouble();
System.out.print("Enter another number: ");
secondno = add.nextDouble();
if(choice == 1){
answer = firstno + secondno;
}
if(choice == 2){
answer = firstno - secondno;
}
if(choice == 3){
answer = firstno * secondno;
}
if(choice == 4){
answer = firstno / secondno;
}
System.out.println("answer: " + answer);
}
}
所以,我做了类似的事情
package firstproject;
import java.util.Scanner;
public class calculator {
public static void main(String args[]){
double firstno, secondno, answer;
int choice;
Scanner add = new Scanner(System.in);
System.out.println("What r u trying to do??");
System.out.println("1 - add");
System.out.println("2 - substract");
System.out.println("3 - multiplication");
System.out.println("4 - division");
choice = add.nextInt();
System.out.print("Enter your 1st number: ");
firstno = add.nextDouble();
System.out.print("Enter another number: ");
secondno = add.nextDouble();
if(choice == 1){
answer = firstno + secondno;
System.out.println("Answer: " + answer);
}
if(choice == 2){
answer = firstno - secondno;
System.out.println("Answer: " + answer);
}
if(choice == 3){
answer = firstno * secondno;
System.out.println("Answer: " + answer);
}
if(choice == 4){
answer = firstno / secondno;
System.out.println("Answer: " + answer);
}
}
}
它奏效了。但我想知道为什么我的第一个代码不起作用。
答案 0 :(得分:5)
您可以访问它,但如果您的任何条件都不是true
,则在您尝试打印时不会初始化answer
。
使用double answer = 0
初始化它。
答案 1 :(得分:2)
Java中的局部变量除非是definitely assigned,否则无法读取 - 换句话说,如果编译器可以证明你可以通过各种方式获取尝试读取变量的表达式将经历对该变量的赋值。
在您的情况下,如果choice
不是1,2,3或4,您将无法完成作业。
解决这个问题的方法:
将您的if
系列更改为if/else
系列,并在末尾添加普通else
,以终止方法或指定值。例如:
if (choice == 1) {
answer = firstno + secondno;
} else if (choice == 2) {
answer = firstno - secondno;
} else if (choice == 3) {
answer = firstno * secondno;
} else if(choice == 4) {
answer = firstno / secondno;
} else {
System.out.println("Invalid choice");
return; // Or assign a value to answer
}
switch
语句代替if
语句,并提供default
案例,该案例可分配给answer
或返回答案 2 :(得分:0)
如果所有ifs中的所有条件都为false,则确实不会初始化变量answer。
说选择是42245234,这行答案有什么价值?
System.out.println("answer: " + answer);
答案 3 :(得分:0)
在打印之前使用answer
之类的值初始化answer=-1
,因为我们如何打印空引用
一旦任何变量初始化,它就可以在条件语句体中使用
假设您没有输入有效选择,answer
中的值是什么,而answer
就像 null引用
答案 4 :(得分:0)
“本地变量答案可能尚未初始化”是准确的。如果用户键入“5”,则答案不会设置为任何值。尝试将答案定义为“answer = 0.0”。
答案 5 :(得分:0)
如果“choice”不属于“1,2,3,4”,则可能不会出现var“answer”。因此,当您尝试在最后打印时,可能会发生此异常。
第二个实际上存在同样的问题,使其工作的唯一原因是您将打印行移动到每个块。所以当“选择”不属于“1,2,3,4”时,代码不需要做什么。它将被视为“没问题”。
对于修复,以上所有内容:)