为什么每次输入值时我的for循环执行多次?

时间:2013-11-12 18:38:50

标签: java arrays

我有一个编程任务要求我让用户输入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);

3 个答案:

答案 0 :(得分:0)

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

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

最后,要将输入转换为整数,请参阅here

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

请注意::: read()函数返回字符,所以即使用户在计算时输入5,也会使用ASCII Code Of 10,而不是一个会产生问题

FIX :::

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);