我对编程很新,所以我想尝试制作一个简单的计算器,这个计算器不是特定于像+这样的符号。无论如何,我不太清楚为什么这不起作用,因为据我所知,我已经做好了一切。
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);
}
}
答案 0 :(得分:1)
这是因为您没有初始化answer
变量,并且您的switch
语句缺少default
个案例来分配它。 Java编译器认为如果symbol
不 1..4
,那么answer
在您将其传递给println
时将保持未初始化状态。
您可以在声明时将answer
设置为某个初始值,也可以将default
个案添加到switch
。
答案 1 :(得分:1)
在声明变量(初始化它)时为其分配默认值,或者为交换机提供默认大小写:
选项1:
double answer = 0;
选项2:
switch(symbol) {
case 1:
...
default:
answer = 0;
}
请注意,您的代码中存在严重错误:您的案例的每个代码块都应以break;
结尾,即
switch(symbol) {
case 1:
answer = fnum + sum;
break;
etc
default:
answer = 0;
}
否则也会执行以下情况的所有代码。开关盒就像一个转到。
答案 2 :(得分:0)
你需要给fnum,snum,在你声明符号时回答一个符号,或者java不能保证它有一个值可以用于进一步的计算。
答案 3 :(得分:0)
或者您为switch语句添加了一个default子句,或者您需要初始化 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:
}