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

如何在循环中用变量存储历史值?求最值、平均及输入次数(无数组)

解决方案:无需数组实现输入统计功能

没问题!你完全不需要用数组来存储所有输入值——只需要在用户输入的过程中实时跟踪几个关键变量,就能搞定最小值、最大值、平均值和输入个数的统计。我帮你修改了代码,把所有需求都实现了:

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++:每输入一个有效数就计数加1
    • sum += num:累加总和,用来计算平均值
    • 对比更新max和min:不需要存所有数,只需要每次和当前的最大/最小值比较就行
  • 平均值计算:用(double) sum / count把整数除法转换成浮点除法,避免结果只保留整数部分
  • 边界处理:如果用户直接输入0退出,会提示没有有效输入,避免除以0的错误

这样修改后,你就能在不使用数组的前提下,完成所有需要的统计功能啦!

内容的提问来源于stack exchange,提问作者Preethi Sinha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:28:10