You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环中不使用数组存储用户输入值,求最值、均值及输入次数问题

不用数组实现输入值的统计(最小、最大、平均、次数)

嘿,你已经搞定最大值的计算啦!其实不用数组完全能实现剩下的功能——我们根本不需要存储所有输入值,只需要在每次用户输入时,用几个变量实时更新统计数据就好。我来给你拆解一下思路,再把代码改好:

需要新增的变量

我们只需要在类里多定义几个静态变量(和你现有的newvalue一样):

  • minValue:记录输入的最小值,初始可以设一个极大值(比如Integer.MAX_VALUE),这样第一次输入的正数肯定比它小,能正确初始化
  • sum:记录所有输入值的总和,用来计算平均值,初始为0
  • count:记录有效输入的次数(也就是用户输入的正数个数),初始为0

修改核心逻辑

在处理用户输入的循环里,每次拿到有效的正数(s1 > 0)时,我们同时更新这几个变量:

  1. 更新最大值:你原来的逻辑已经没问题,保持住
  2. 更新最小值:如果是第一次输入(count == 0),直接把minValue设为当前值;否则如果当前值比minValue小,就更新它
  3. 累加总和:把当前值加到sum里
  4. 计数加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:32:39