用户输入分为两个数组,double和string

时间:2016-09-09 22:34:16

标签: java arrays loops input

我的目标也是做一个简单的计算器。我已经创建了一个可以采用两个值并添加,减去等的方法,但我也想尝试制作一个可以读取用户输入的方法:2 + 33 * 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,但我不明白为什么其中一个进入字符串数组。

如果我在输入一个角色后尝试两个输入一个数字,我会得到一个例外并退出程序。

感谢您的回复!

1 个答案:

答案 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块进行一些小改动来使它远离数组。