如何在循环中用变量存储历史值?求最值、平均及输入次数(无数组)
解决方案:无需数组实现输入统计功能
没问题!你完全不需要用数组来存储所有输入值——只需要在用户输入的过程中实时跟踪几个关键变量,就能搞定最小值、最大值、平均值和输入个数的统计。我帮你修改了代码,把所有需求都实现了:
import javax.swing.JOptionPane; public class NumberStats { // 定义需要跟踪的统计变量 public static int count; // 正整数输入个数 public static int sum; // 输入正整数的总和 public static int max; // 最大正整数 public static int min; // 最小正整数 public static void main(String[] args) { userInputAndTrackStats(); calculateAndDisplayStats(); } public static void userInputAndTrackStats() { // 初始化变量 count = 0; sum = 0; max = 0; min = Integer.MAX_VALUE; // 初始化为整数最大值,确保第一个正整数能覆盖它 while (true) { String inputStr = JOptionPane.showInputDialog("Enter a positive integer. Enter 0 to quit. "); int num = Integer.parseInt(inputStr); if (num == 0) { break; // 输入0退出循环 } // 只处理正整数(避免用户输入负数的情况) if (num > 0) { count++; sum += num; // 更新最大值 if (num > max) { max = num; } // 更新最小值:第一次输入时直接赋值,之后取更小的那个 if (num < min) { min = num; } } else { JOptionPane.showMessageDialog(null, "Please enter a positive integer or 0 to quit."); } } } public static void calculateAndDisplayStats() { // 先判断是否有有效输入 if (count == 0) { System.out.println("No positive integers were entered."); return; } // 计算平均值,用double避免整数除法丢失精度 double average = (double) sum / count; // 输出所有统计结果 System.out.println("Total positive integers entered: " + count); System.out.println("The greatest positive number is: " + max); System.out.println("The smallest positive number is: " + min); System.out.printf("The average of positive numbers is: %.2f%n", average); } }
关键逻辑说明:
- 变量初始化:把
min初始化为Integer.MAX_VALUE(Java中整数的最大值),这样第一个输入的正整数肯定比它小,能直接替换成第一个值;count和sum初始化为0,max初始化为0。 - 输入处理循环:每次输入后先判断是否为0(退出),如果是正整数就更新统计变量:
count++:每输入一个有效数就计数加1sum += num:累加总和,用来计算平均值- 对比更新
max和min:不需要存所有数,只需要每次和当前的最大/最小值比较就行
- 平均值计算:用
(double) sum / count把整数除法转换成浮点除法,避免结果只保留整数部分 - 边界处理:如果用户直接输入0退出,会提示没有有效输入,避免除以0的错误
这样修改后,你就能在不使用数组的前提下,完成所有需要的统计功能啦!
内容的提问来源于stack exchange,提问作者Preethi Sinha
相关产品推荐
相关产品推荐

