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

Java中位数计算代码未输出指定提示信息问题排查

问题分析:未输出“Data items past number 10 ignored”提示的原因

核心错误点

  1. 判断条件逻辑错误
    原代码中while循环的终止条件是count < MAX_INPUTS(即count小于10),这意味着count的最大值只能达到10,永远不会超过MAX_INPUTS。因此后续的if (count > MAX_INPUTS)判断永远无法触发,自然不会输出提示信息。

  2. 未检测额外输入的存在
    当输入超过10个非负整数时,原循环在读取第10个输入后就直接退出,但并未检查后续是否还有更多的非负输入。程序无法得知存在被忽略的数据,也就无法触发提示。

修正方案

要解决这个问题,需要:

  • 统计所有输入的非负整数总数(包括超过10的部分),或者检测循环结束后是否还有未读取的非负输入;
  • 用正确的条件判断是否有输入被忽略。

以下是两种可行的修正代码示例:

方案1:统计总输入数

import java.util.Scanner;

public class Median {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        final int MAX_INPUTS = 10;
        int[] numbers = new int[MAX_INPUTS];
        int count = 0;
        int totalNonNegative = 0;
        int input;

        // 读取所有输入直到遇到负数,统计总非负输入数
        while (true) {
            input = scnr.nextInt();
            if (input < 0) {
                break;
            }
            totalNonNegative++;
            // 仅存储前10个有效输入
            if (count < MAX_INPUTS) {
                numbers[count] = input;
                count++;
            }
        }

        // 处理无输入情况
        if (count == 0) {
            System.out.println("No data entered.");
            return;
        }

        // 计算中位数
        double median;
        if (count % 2 == 0) {
            int middle1 = numbers[count / 2 - 1];
            int middle2 = numbers[count / 2];
            median = (double) (middle1 + middle2) / 2;
        } else {
            median = numbers[count / 2];
        }

        // 输出提示及结果
        if (totalNonNegative > MAX_INPUTS) {
            System.out.println("Data items past number 10 ignored");
        }
        System.out.println("Median: " + median);
    }
}

方案2:检测循环后是否有额外非负输入

import java.util.Scanner;

public class Median {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        final int MAX_INPUTS = 10;
        int[] numbers = new int[MAX_INPUTS];
        int count = 0;
        int input;
        boolean hasExtraInputs = false;

        // 读取前10个非负输入
        while (count < MAX_INPUTS) {
            input = scnr.nextInt();
            if (input < 0) {
                break;
            }
            numbers[count] = input;
            count++;
        }

        // 检查是否还有未读取的非负输入
        if (count == MAX_INPUTS) {
            while (scnr.hasNextInt()) {
                input = scnr.nextInt();
                if (input >= 0) {
                    hasExtraInputs = true;
                } else {
                    break;
                }
            }
        }

        // 处理无输入情况
        if (count == 0) {
            System.out.println("No data entered.");
            return;
        }

        // 计算中位数
        double median;
        if (count % 2 == 0) {
            int middle1 = numbers[count / 2 - 1];
            int middle2 = numbers[count / 2];
            median = (double) (middle1 + middle2) / 2;
        } else {
            median = numbers[count / 2];
        }

        // 输出提示及结果
        if (hasExtraInputs) {
            System.out.println("Data items past number 10 ignored");
        }
        System.out.println("Median: " + median);
    }
}

效果验证

使用输入1 2 3 4 5 60 70 80 90 100 110 120 130 -100测试修正后的代码,会正确输出:

Data items past number 10 ignored
Median: 32.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:34:55