Java 局部变量可能未初始化
可能重复:Java 局部变量可能未初始化,java,scope,Java,Scope,可能重复: 我对编程相当陌生,所以我想尝试制作一个简单的计算器,它不是特定于一个符号,比如+。不管怎样,我不太清楚为什么这不起作用,因为据我所知,我做的每件事都是对的 import java.util.Scanner; public class calculator2 { public static void main(String args[]){ Scanner tom = new Scanner(System.in); double fnum
我对编程相当陌生,所以我想尝试制作一个简单的计算器,它不是特定于一个符号,比如+。不管怎样,我不太清楚为什么这不起作用,因为据我所知,我做的每件事都是对的
import java.util.Scanner;
public class calculator2 {
public static void main(String args[]){
Scanner tom = new Scanner(System.in);
double fnum, snum, answer;
int symbol;
System.out.println("Enter First Number");
fnum = tom.nextDouble();
System.out.println("Enter Comand, 1 = add, 2 = subtract, 3 = divide, 4 = multiply");
symbol = (int)tom.nextDouble();
System.out.println("Enter Second Number");
snum = tom.nextDouble();
switch (symbol){
case 1:
answer = fnum + snum;
case 2:
answer = fnum - snum;
case 3:
answer = fnum / snum;
case 4:
answer = fnum * snum;
}
System.out.println(answer);
}
}
这是因为您没有初始化
answer
变量,并且switch
语句缺少一个default
案例来分配它。Java编译器认为,如果symbol
不是1..4
,那么answer
将在传递给println
时保持未初始化状态
您可以在声明点将
answer
设置为某个初始值,或者在开关中添加一个default
大小写,当您声明一个符号或值时,请回答该符号或值,否则java无法保证该符号有一个值可用于进一步计算。在声明变量时为其指定一个默认值(初始化它),或为开关提供一个默认大小写:
备选案文1:
double answer = 0;
备选案文2:
switch(symbol) {
case 1:
...
default:
answer = 0;
}
请注意,您的代码中有一个严重的bug:您案例中的每个代码块都应该以中断结束代码>,即
switch(symbol) {
case 1:
answer = fnum + sum;
break;
etc
default:
answer = 0;
}
否则,也将执行以下情况的所有代码。switch case类似于goto。或者为switch语句添加默认子句,或者需要初始化answer变量
此外,您的代码可能有缺陷,因为“切换失败”。当满足case语句中的条件时,还将执行以下case语句,直到出现break(或return)语句
如果我处于您的情况,我会编写如下代码:
double fnum = 0, snum = 0, answer 0;
int symbol = 0
...
switch (symbol){
case 1:
answer = fnum + snum; break;
case 2:
answer = fnum - snum; break;
case 3:
answer = fnum / snum; break;
case 4:
answer = fnum * snum; break;
default:
}
提示:用你正在使用的语言标记问题<代码>变量
和本地
可以与任何语言相关,并且非常通用,因此不会有太多追随者。另外,不要在Stackoverflow的代码中使用制表符。这是错误的,默认情况是可选的。@chrismcabe我添加了一些说明。谢谢