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