我正在编写一个程序,它读取用户输入的正整数序列。用户一次只能输入一个整数。然后它将计算这些整数的平均值。当用户输入0时程序将结束。(0不计入平均值)。一旦程序结束,程序将打印出平均值。
问题:当我进入while循环时,我的代码停止工作,因此它不会计算用户的输入,因此不打印任何内容。为什么我的while循环不计算用户输入的平均值? 感谢您的指导:)
import java.util.Scanner;
public class AverageOfIntegers {
public static void main(String[] args) {
int integer;
double sum;
sum = 0;
double average;
Scanner input = new Scanner(System.in);
int count; count = 0;
average = 0;
System.out.println("Please enter an integer: ");
integer = input.nextInt();
while (integer != 0) {
count = count + 1;
sum = sum + integer;
average = sum / count;
}
System.out.println("Average = " + average);
}
}
答案 0 :(得分:4)
这是因为你实际上从未总结过多于一个整数。用户只输入一个号码。因此,您的循环基本上只对一个数字起作用。您需要将输入放在while循环中并保存运行总和并计数。更像这样的东西
while (integer != 0) {
count += 1;
sum += integer;
average = sum / count;
integer = input.nextInt();
}
答案 1 :(得分:1)
首先,在定义数据类型时,可以在定义中设置其默认值。例如:
double sum = 0;
vs
double sum;
sum = 0;
其次,sum = sum + integer;
与:sum += integer;
第三,count = count + 1;
与:count += 1
或(更好),count++;
至于你的实际算法,有一个问题和一个建议:
每次循环后你都没有改变integer
的值。所以你可以
要么在while条件下执行:while ((integer =
input.nextInt()) != 0) {
,要么在每个循环结束时执行:
while (integer != 0) {
count ++;
sum += integer;
average = sum / count;
integer = input.nextInt();
}
这是一个技术上更好的代码(在我看来)的建议,但它看起来更好,更直观,并且需要更少的计算来计算之后的来代替while循环期间这样,您只需要在需要时计算一次,而不是每个循环,这是不需要的。
<强> _ __ _ __ _ __ _ __ _ 的__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ < / EM> __ _ __ _ __ _ __ _ ____ 强>
public class AverageOfIntegers {
public static void main(String[] args) {
int integer;
double sum = 0;
double average = 0;
Scanner input = new Scanner(System.in);
int count = 0;
System.out.println("Please enter an integer: ");
// set integer = to the nextInt() while looping so it calculates properly
while ((integer = input.nextInt()) != 0) {
count ++;
sum += integer;
}
average = sum / count; // calculate the average after the while-loop
System.out.println("Average = " + average);
}
}
<强> _ __ _ __ _ __ _ __ _ 的__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ < / EM> __ _ __ _ __ _ __ _ ____ 强>
请输入一个整数:
5
10
15
0
平均值= 10.0
所以它做了5 + 10 + 15 = 30(这是总和),然后平均值是30/3(30是总和,3是计数),这给了你Average = 10.0
。
答案 2 :(得分:0)
您需要在循环中移动integer = input.nextInt();
,以便您的程序将循环收集输入。请参阅更正后的版本:
import java.util.Scanner;
public class AverageOfIntegers {
public static void main(String[] args) {
int integer = 0, count = 0;
double sum = 0.0, average = 0.0;
Scanner input = new Scanner(System.in);
System.out.println("Please enter an integer: ");
integer = input.nextInt();
while (integer != 0) {
count = count + 1;
sum = sum + integer;
System.out.println("Please enter an integer: ");
integer = input.nextInt();
}
average = sum / count;
System.out.println("Average = " + average);
}
}
答案 3 :(得分:0)
在循环中:
while (integer != 0) {
count = count + 1;
sum = sum + integer;
average = sum / count;
}
这只会在integer
为0时停止,但此变量在循环中不会改变,因此如果它不在第一位,它将永远不会为0。
根据你所说的你想做的事情,你应该在你的循环中重复调用integer = input.nextInt();
,点击这个:
System.out.println("Please enter an integer: ");
integer = input.nextInt();
while (integer != 0) {
count = count + 1;
sum = sum + integer;
System.out.println("Please enter an integer: ");
integer = input.nextInt();
}
average = sum / count;
另外,正如其他人所说,你只需要在循环后计算average
一次,所以我也移动了它。
答案 4 :(得分:0)
问题是input.nextInt()应该是循环的一部分。你编写它的方式,只要第一个输入非零,代码就会进入无限循环。相反,做:
while ((integer = input.nextInt()) != 0) {
count = count + 1;
sum = sum + integer;
average = sum / count;
}