我的目标也是做一个简单的计算器。我已经创建了一个可以采用两个值并添加,减去等的方法,但我也想尝试制作一个可以读取用户输入的方法:2 + 3
和3 * 4 + 5 / 2
,作为示例。我参加了编程的入门课程。
因此,用户输入决定了多少个值和多少个操作(不考虑优先级规则)。
我想也许我可以使用带有if else的while循环将用户输入直接输入到两个数组中。在伪代码中,
while (input is not quit)
if input is a value, put in value array
if input is symbol, put in symbol array
到目前为止,我已写过:
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String input = "";
Double[] values = new Double[10];
String[] symbols = new String[10];
int v = 0;
int s = 0;
while (!input.equals("q")) {
input = sc.nextLine();
if (sc.hasNextDouble()) {
values[v] = Double.parseDouble(input);
v++;
} else {
symbols[s] = input;
s++;
}
}
System.out.println(Arrays.toString(values));
System.out.println(Arrays.toString(symbols));
}
试运行是这样的:
2
2
2
a
b
s
q
q
[2.0, 2.0, null, null, null, null, null, null, null, null]
[2, a, b, s, q, null, null, null, null, null]
我有点可以看到我需要两次按q,但我不明白为什么其中一个进入字符串数组。
如果我在输入一个角色后尝试两个输入一个数字,我会得到一个例外并退出程序。
感谢您的回复!
答案 0 :(得分:0)
您测试处理输入的方式会在下一个输入处查看以做出决定,因此您在input
中的值与您的测试不同步。我建议这样的事情:
bool done = false;
while (!done) {
if (sc.hasNextDouble()) {
values[v] = Double.parseDouble(sc.nextLine());
v++;
} else {
symbols[s] = sc.nextLine();
if (symbols[s].equals("q")) done = true;
s++;
}
}
我不确定你为什么要捕捉" q"在你的阵列中,但既然你是如何完成代码的,那我也在这里完成了。你可以通过对else块进行一些小改动来使它远离数组。