循环中不使用数组存储用户输入值,求最值、均值及输入次数问题
不用数组实现输入值的统计(最小、最大、平均、次数)
嘿,你已经搞定最大值的计算啦!其实不用数组完全能实现剩下的功能——我们根本不需要存储所有输入值,只需要在每次用户输入时,用几个变量实时更新统计数据就好。我来给你拆解一下思路,再把代码改好:
需要新增的变量
我们只需要在类里多定义几个静态变量(和你现有的newvalue一样):
minValue:记录输入的最小值,初始可以设一个极大值(比如Integer.MAX_VALUE),这样第一次输入的正数肯定比它小,能正确初始化sum:记录所有输入值的总和,用来计算平均值,初始为0count:记录有效输入的次数(也就是用户输入的正数个数),初始为0
修改核心逻辑
在处理用户输入的循环里,每次拿到有效的正数(s1 > 0)时,我们同时更新这几个变量:
- 更新最大值:你原来的逻辑已经没问题,保持住
- 更新最小值:如果是第一次输入(
count == 0),直接把minValue设为当前值;否则如果当前值比minValue小,就更新它 - 累加总和:把当前值加到
sum里 - 计数加1:
count++
还要注意处理用户直接输入0退出的情况,避免计算平均值时出现除以0的错误。
修改后的完整代码
import javax.swing.JOptionPane; public class Hello { public static int maxValue; public static int minValue; public static int sum; public static int count; public static void main(String[] args) { processUserInputs(); calculateAndShowResults(); } public static void processUserInputs() { // 初始化变量 maxValue = 0; minValue = Integer.MAX_VALUE; sum = 0; count = 0; int input; do { String strInput = JOptionPane.showInputDialog("Enter a positive integer. Enter 0 to quit. "); input = Integer.parseInt(strInput); if (input == 0) { break; } // 处理有效正数输入 if (input > 0) { // 更新最大值 if (input > maxValue) { maxValue = input; } // 更新最小值 if (count == 0 || input < minValue) { minValue = input; } // 累加总和 sum += input; // 计数加1 count++; } else { JOptionPane.showMessageDialog(null, "Please enter a positive integer or 0!"); } } while (true); // 用break控制退出,逻辑更清晰 } public static void calculateAndShowResults() { if (count == 0) { System.out.println("No positive integers were entered."); return; } double average = (double) sum / count; // 转成double避免整数除法 System.out.println("Total positive numbers entered: " + count); System.out.println("The greatest positive number is: " + maxValue); System.out.println("The smallest positive number is: " + minValue); System.out.printf("The average of the numbers is: %.2f\n", average); // 保留两位小数 } }
关键改动说明
- 把原来的
newvalue改名为maxValue,变量名更语义化 - 新增了
minValue、sum、count三个变量,分别负责最小值、总和、计数 - 循环里增加了对无效输入(负数)的提示,更友好
- 计算平均值时把
sum转成double,避免整数除法导致的精度丢失(比如输入1和2,整数除法会得到1,转成double后得到1.5) - 增加了无有效输入时的判断,防止除以0的错误
这样一来,不用数组也能完美实现你需要的所有功能啦!
内容的提问来源于stack exchange,提问作者Sashrik R
相关产品推荐
相关产品推荐

