Java实现输入十个数取两个最大值的代码问题及优化咨询
解决从10个输入数字中找出两个最大值的问题
问题描述
需求是从10个用户输入的数字中找出两个最大值,且不使用Java预建方法。现有代码在大部分场景运行正常,但当输入的十个数字为升序时(例如1,2,3,...,10),secondMax的值仍为0,无法满足需求。
现有代码:
import java.util.Scanner; public class TwoLargestNumber { public static void main(String []args) { Scanner input = new Scanner(System.in); int counter = 0; int firstMax = 0; int secondMax = 0; while (counter <= 9) { System.out.println("Enter ten numbers: "); int number = input.nextInt(); if (number > firstMax) { firstMax = number; } else if (number > secondMax && number != firstMax) { secondMax = number; } counter += 1; } System.out.printf("Largest numbers found: %d , %d", firstMax, secondMax); input.close(); } }
问题原因
- 初始值设置不合理:把
firstMax和secondMax初始化为0,若输入全为正数且升序,所有数字都会直接更新firstMax,导致secondMax始终没有赋值机会;若输入负数,0反而会成为错误的最大值。 - 最大值更新逻辑错误:当新数字大于
firstMax时,没有将原firstMax的值传递给secondMax,导致之前的最大值被丢弃,无法成为第二大值。 - 重复值判断多余:
number != firstMax的限制会导致输入多个相同最大值时,secondMax无法被正确赋值为该最大值。
修改后的代码
import java.util.Scanner; public class TwoLargestNumber { public static void main(String []args) { Scanner input = new Scanner(System.in); int counter = 0; int firstMax = 0; int secondMax = 0; // 用前两个输入初始化最大值,避免初始值不合理问题 System.out.println("Enter number 1: "); firstMax = input.nextInt(); System.out.println("Enter number 2: "); secondMax = input.nextInt(); // 确保firstMax始终大于等于secondMax if (secondMax > firstMax) { int temp = firstMax; firstMax = secondMax; secondMax = temp; } counter = 2; while (counter < 10) { System.out.printf("Enter number %d: ", counter + 1); int number = input.nextInt(); if (number > firstMax) { // 新数字更大,原第一大降级为第二大 secondMax = firstMax; firstMax = number; } else if (number > secondMax) { // 新数字仅大于第二大,直接更新第二大 secondMax = number; } counter++; } System.out.printf("Largest numbers found: %d , %d", firstMax, secondMax); input.close(); } }
修改说明
- 初始化优化:先用前两个输入的数字初始化
firstMax和secondMax,并调整顺序确保firstMax更大,彻底避免初始值不合理的问题。 - 更新逻辑修正:当新数字超过当前第一大值时,先将原第一大值赋值给
secondMax,再更新firstMax,保证之前的最大值被保留为第二大值。 - 移除多余判断:去掉
number != firstMax的限制,支持输入多个相同最大值的场景(例如输入10个10,此时两个最大值都是10)。 - 提示信息优化:修改输入提示为按顺序显示第几个数字,提升用户输入体验。
内容的提问来源于stack exchange,提问作者LogicMasterBV
相关产品推荐
相关产品推荐

