我不久前开始学习Java,我认为制作一个可以在终端中运行的计算器。最近我添加了一个数组列表来存储历史记录,然后出了点问题。 计算器程序:
import java.util.Scanner;
import java.util.ArrayList;
public class calc_case {
public static void main(String[] args) {
System.out.println("Welcom to The Calculator!");
double a;
double b;
double c;
Scanner input0;
int input = 0;
ArrayList<Double> history = new ArrayList<Double>();
while (input != 6) {
try {Thread.sleep(2000);} catch(InterruptedException ex) {Thread.currentThread().interrupt();}
a = 0; b = 0; c = 0; input = 0;
System.out.println("#################################################");
System.out.println("How can I help you?");
System.out.println("1-Add\n2-Subtrackt\n3-Devide\n4-Multiply\n5-Show history\n6-Exit");
input0 = new Scanner(System.in);
input = input0.nextInt();
switch (input) {
case 1: //add
System.out.println("Input two numbers:");
input0 = new Scanner(System.in);
a = input0.nextDouble();
input0 = new Scanner(System.in);
b = input0.nextDouble();
c = a + b;
System.out.println("Calculating... \nThe answer is: " + c );
break;
case 2: //subtrackt
System.out.println("Input two numbers:");
input0 = new Scanner(System.in);
a = input0.nextDouble();
input0 = new Scanner(System.in);
b = input0.nextDouble();
c = a - b;
System.out.println("Calculating... \nThe answer is: " + c );
break;
case 3: //devide
System.out.println("Input two numbers:");
input0 = new Scanner(System.in);
a = input0.nextDouble();
input0 = new Scanner(System.in);
b = input0.nextDouble();
c = a/b;
System.out.println("Calculating... \nThe answer is: " + c );
break;
case 4: //multiply
System.out.println("Input two numbers:");
input0 = new Scanner(System.in);
a = input0.nextDouble();
input0 = new Scanner(System.in);
b = input0.nextDouble();
c = a*b;
System.out.println("Calculating... \nThe answer is: " + c );
break;
case 5: //history
for (int x = 0; x < history.size(); x++) {
System.out.println(history.get(x));
}
case 6: //exit
System.out.println("Goodbye!\n Killing process... " + " OK");
default:
history.add(c);
}
}
}
}
在选择选项5('显示历史记录')后,将案例5添加为“显示历史记录”并将案例5“退出”移至案例6“退出”后,我得到了:
Goodbye!
Killing process... OK
我尝试重新编译程序,删除类文件,并将程序粘贴到新文件中。我的计划有什么问题?
答案 0 :(得分:6)
两件事:
case 5
之后的中断;所以你总是陷入下一个案例。下一个case 6
。来自&#34;清洁编码&#34;透视:阅读&#34;单层抽象&#34;原理。你真的不希望在一个方法中有这么多代码;例如:你的每个案例块......应该进入自己的方法。你想创建小型单位&#34;这一点可以理解。超过10行或更多的东西总是需要比更小的东西更多的工作!
你知道;当每个代码都这样: ...
case 3:
divide();
break;
case 4:
multiply();
break;
你不觉得自己会发现自己的问题吗?!
答案 1 :(得分:2)
案例5中没有中断,这就是在完成案例5后执行案例6的原因
答案 2 :(得分:1)
break
中的for循环后,您遗漏了case 5:
,因此它会落入case 6:
。
此外,在case 6:
声明后,break
似乎缺少System.out
。