Java带输入的While循环无输入提示及结果输出问题求助
问题分析与代码修复
问题现象
编写的课堂练习程序,需求为提示用户输入一系列以0结尾的数字,正数累加到positiveSum,负数累加到negativeSum,统计总数字个数并计算double类型平均值。但运行时仅显示IntelliJ下载目录路径,无输入提示和结果输出,IDE无错误警告。
代码问题点
- 初始输入无提示:循环前直接调用
input.nextInt(),程序无任何提示就等待用户输入,用户无法知晓需要操作,导致程序看似无响应 - 首次输入被遗漏:循环开始后才读取新的输入,首次输入的数字未被纳入统计和累加
- 平均值计算错误:公式
(numberOfPositive + numberOfNegative) / totalNumbers逻辑错误,实际应为正负数值总和除以总个数,且未做类型转换导致整数除法精度丢失 - 输出时机错误:将结果输出放在循环内部,每次输入数字就打印中间状态,不符合需求的最终结果输出
- 输出文本混淆:将正数/负数的总和(
positiveSum/negativeSum)错误描述为“个数” - 除零风险:若用户直接输入0,
totalNumbers为0,计算平均值会触发除零异常
修复后的代码
import java.util.Scanner; public class LoopPractice { public static void main(String[] args) { // 创建Scanner对象 Scanner input = new Scanner(System.in); int positiveSum = 0; int negativeSum = 0; int numberOfPositive = 0; int numberOfNegative = 0; int totalNumbers = 0; // 先提示用户输入 System.out.println("Enter integers ending with 0: "); int integers = input.nextInt(); while (integers != 0) { if (integers > 0) { positiveSum += integers; numberOfPositive++; totalNumbers++; } else if (integers < 0) { negativeSum += integers; numberOfNegative++; totalNumbers++; } // 读取下一个输入 integers = input.nextInt(); } // 输出最终结果 System.out.println("Sum of positive numbers: " + positiveSum); System.out.println("Sum of negative numbers: " + negativeSum); System.out.println("Total number of entered numbers: " + totalNumbers); // 处理除零情况 if (totalNumbers > 0) { double average = (double)(positiveSum + negativeSum) / totalNumbers; System.out.println("Average of the numbers: " + average); } else { System.out.println("No numbers were entered except 0."); } input.close(); } }
修复说明
- 将输入提示移至初始输入前,让用户明确知晓需要输入数字
- 先读取输入再进入循环,确保每一个输入的数字(除了终止的0)都被处理
- 修正平均值计算逻辑,用正负总和除以总个数,并通过
(double)强制类型转换避免整数除法 - 将所有结果输出移至循环结束后,只打印最终统计结果
- 修正输出文本,明确区分总和与个数的描述
- 添加除零判断,避免用户直接输入0时出现异常
内容的提问来源于stack exchange,提问作者Larry Sizemore
相关产品推荐
相关产品推荐

