0

我有一个编程任务,要求我让用户输入 10 个(或更少)整数并将它们放入一个数组中,然后取它们的平均值并输出。如果他们输入一个句点,程序应该停止要求整数并进行平均。

我的问题是,每当用户输入一个整数时,for 循环都会执行不止一次。

我的代码如下。有想法该怎么解决这个吗?

    int[] intArr = new int[10];

    int entered;

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    for(entered = 0; entered < 10; entered++){
        System.out.println("Please enter an integer: ");

        int input = br.read();

        if(input == '.') break;

        else{
            intArr[entered] = input;
        }
    }

    int total = 0;
    for(int i : intArr){
        total += i;
    }

    System.out.println("Average: " + total/entered);
    System.out.println("Entered: " + entered);
4

3 回答 3

0

用于String input = br.readLine()读取整行。

要检查".",请使用if (input.equals(".")) { ... }。(如果您想知道为什么必须使用而不是字符串,请查看此内容).equals()==

最后,要将输入转换为整数,请参见此处

于 2013-11-12T18:45:44.777 回答
0
for (entered = 0; entered < 10; entered++) {
    System.out.println("Please enter an integer: ");
    String str = br.readLine();
    if (".".equals(str)) {
        break;
    }
    int input = Integer.valueOf(str);
    intArr[entered] = input;
}
于 2013-11-12T18:49:48.613 回答
0

好的,它真的很简单,首先让我解释一下它为什么会发生好的,read() 函数读取输入值的第一个字符,其余行存储在缓冲区中,因此当您输入任何整数时,例如:1 1 存储在变量中和 ' \n'默认情况下添加到输入值的java被存储在缓冲区中,因此在循环的下一次迭代中,它从缓冲区中读取字符'\n'作为输入值并移动到下一次迭代

示例 2:如果在您的程序中我们输入输入为 12,它会跳过两次迭代,因为首先它在输入时存储 1 在下一次迭代中,它将先前输入的值 2 作为这次的输入 在进一步的下一次迭代中,它需要 '\n ' 然后移动到下一次迭代,此时它们在内存中没有任何字符,因此它要求您输入

注意::: read() 函数返回字符,因此即使用户在计算时输入 5 也将使用 10 的 ASCII 代码,即 53 不会产生问题

使固定:::

int[] intArr = new int[10];
int entered;
BufferedReader br = new BufferedReader(new InputStreamReader(System. in ));
for (entered = 0; entered < 10; entered++) {
    System.out.println("Please enter an integer: ");

    String input = br.readLine();

    if (input.equals(".")) {
        break;
    } else {
        intArr[entered] = Integer.parseInt(input);
    }
}
int total = 0;
for (int i: intArr) {
    total += i;
}
System.out.println("Average: " + total / entered);
System.out.println("Entered: " + entered);
于 2013-11-12T19:22:56.397 回答