Java中位数计算代码未输出指定提示信息问题排查
问题分析:未输出“Data items past number 10 ignored”提示的原因
核心错误点
判断条件逻辑错误
原代码中while循环的终止条件是count < MAX_INPUTS(即count小于10),这意味着count的最大值只能达到10,永远不会超过MAX_INPUTS。因此后续的if (count > MAX_INPUTS)判断永远无法触发,自然不会输出提示信息。未检测额外输入的存在
当输入超过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
相关产品推荐
相关产品推荐

