Java 如何修复从用户输入获取平均值的问题
说明如下:Java 如何修复从用户输入获取平均值的问题,java,Java,说明如下: 编写一个名为InputHenPrintSumandAverage的方法,该方法没有任何参数 该方法不应返回任何内容(void),并且需要保持从键盘读取整数 当用户输入非整数的内容时,需要以“SUM=XX AVG=YY”格式打印消息。XX表示所有输入的int型数字之和。 YY表示所有long类型数的计算平均值 我已经编写了以下方法,但我一直得到不正确的平均值。我可以改变什么来获得正确的平均值 public static void inputThenPrintSumAndAverag
- 编写一个名为InputHenPrintSumandAverage的方法,该方法没有任何参数
- 该方法不应返回任何内容(void),并且需要保持从键盘读取整数
- 当用户输入非整数的内容时,需要以“SUM=XX AVG=YY”格式打印消息。XX表示所有输入的int型数字之和。 YY表示所有long类型数的计算平均值
public static void inputThenPrintSumAndAverage(){
Scanner scanner = new Scanner(System.in);
int sum = 0, counter = 0;
long average = 0L;
while(true) {
boolean number = scanner.hasNextInt();
if(!number)
{
counter++;
break;
}
else {
int digit = scanner.nextInt();
sum += digit;
counter++;
}
}
average = sum / counter;
System.out.println("SUM = " + sum + " AVG = " + average);
}
应采取以下措施:
if(!number)
break;
你的平均值是错误的,因为你增加的“计数器”比你应该增加的多
当然,最后您必须再添加一条if
语句,以确保如果计数器为零,您不会试图除以计数器。在这种情况下,平均值是未定义的
此外,正如其他人在评论中指出的那样,我们完全不清楚你说“我一直得到不正确的平均数”是什么意思,我们通常对措辞如此含糊的问题表示不满。但是,如果您的“正确平均值”是指带小数的平均值,那么您应该使用double
而不是long
作为平均值,并且您应该在除法之前将计数器
转换为double
,为了强制执行双除法而不是长除法。使用scanner.hasnetint()
读取util,提供了一个非整数值作为输入:
public static void inputThenPrintSumAndAverage() {
Scanner scanner = new Scanner(System.in);
int number, sum = 0, counter = 0;
long average = 0L;
while (scanner.hasNextInt()) {
number = scanner.nextInt();
sum += number;
counter++;
}
if(counter != 0){
average = sum / counter;
}
System.out.println("SUM = " + sum + " AVG = " + average);
}
请注意,您应该检查计数器的值以避免被零除。
如果希望平均值为小数,请将average
的类型更改为double:double average代码>并将除法转换为双精度:平均值=(双精度)和/计数器代码>你说的“不正确的平均值”是什么意思,你能举个例子吗?你的意思是它不是一个十进制数而是一个整数(因为你在做整数除法)?还有:你确定你应该做counter++代码>如果用户没有输入数字,您将在该块中处理?如果您正在扫描整数,您如何知道用户是否输入了长字符?是否需要点值?只需将求和或计数器转换为浮点
或双精度
,在用户未输入数字的if块中是否需要计数器?您好,很抱歉,内容含糊不清。我是新手!让我解释一下:如果用户输入1 2 3 4 5 a,那么该方法应该返回15的和和和3的平均值,但我得到的平均值是2。每次我得到的正确答案平均少一个。对不起,我是新手!让我解释一下:如果用户输入1 2 3 4 5 a,那么该方法应该返回15的和和和3的平均值,但我得到的平均值是2。每次我得到的正确答案平均少一个。