Java输入3个不同数字求最大值程序循环输入不停止问题排查
问题原因
- 你使用了无终止条件的
while(true)循环,仅靠输入-1才会终止,没有设置输入满3个有效数字就停止的逻辑 - 数组初始化长度为100,
contain方法遍历全量数组时,未赋值的数组元素默认值为0,会导致输入0时被误判为重复 - 题目要求出现重复就直接退出程序,你当前的逻辑是重复后提示重输入,不符合要求
- 你使用了内置的
Math.max方法计算最大值,违反了题目禁止使用内置最大值查找函数的约束 - 最大值初始值固定为0,如果输入的三个数全为负数,会得到错误的计算结果
修正后代码
import java.util.Scanner; public class Assignment_1_Exercise_22 { // 只遍历已经存入的有效元素,避免误判默认值0为重复 public static boolean contain(int[] numbs, int count, int x) { for (int i = 0; i < count; i++) { if (numbs[i] == x) { return true; } } return false; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 仅需存储3个数字,数组长度设为3即可 int[] numbs = new int[3]; int count = 0; int largest = 0; // 循环终止条件修改为输入满3个有效数字就停止 while (count < 3) { System.out.print("请输入第" + (count + 1) + "个数字:"); int x = sc.nextInt(); if (contain(numbs, count, x)) { System.out.println("存在重复数字,程序退出。"); sc.close(); // 出现重复直接退出程序,符合题目要求 return; } numbs[count] = x; // 手动实现最大值比较,不使用内置Math.max if (count == 0) { largest = x; } else { if (x > largest) { largest = x; } } count++; } System.out.println("三个数中的最大值是:" + largest); sc.close(); } }
改动说明
- 循环条件改为
count < 3,输入满3个互不重复的数字就自动终止,不需要额外输入-1 - 优化了
contain方法,仅遍历已经存入的有效元素,避免默认值0导致的重复误判 - 检测到重复数字后直接终止程序,符合题目要求
- 手动实现最大值比较逻辑,删除了内置的
Math.max调用,满足约束条件 - 第一个输入的数字直接赋值为初始最大值,解决全负数输入时最大值计算错误的问题
内容的提问来源于stack exchange,提问作者Daniel.grafton
相关产品推荐
相关产品推荐

