Java作业求助:无数组实现最大次大值查找(含重复最大值处理)
解决Java找最大值和次大值(含重复最大值处理)的问题
我来帮你搞定这个问题!你的代码已经实现了基础功能,但在重复最大值的处理和初始值设置上存在两个关键问题,咱们一步步来修正:
原代码的核心问题
- 初始值不合理:你把
max1st和max2nd初始化为0,如果用户输入的全是负数,0会被错误地当成最大值。 - 重复最大值逻辑缺失:当输入的数等于当前最大值时,没有同步更新次大值,导致次大值停留在初始值或之前的较小值。
修正后的代码
import java.util.Scanner; public class FindTwoLargest { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int num; int max1st = 0, max2nd = 0; int count = 1; boolean hasValidInput = false; // 标记是否有有效输入(非0) System.out.println("This program allows the user to create a list of integers until the user enters 0"); System.out.println("The program will print the Largest value and the Second largest value from the list!"); while (true) { System.out.print("Integer No." + count + " "); num = sc.nextInt(); // 输入0时停止循环 if (num == 0) { break; } hasValidInput = true; // 处理第一个有效输入 if (count == 1) { max1st = num; max2nd = num; } else { if (num > max1st) { // 新数比最大值大:原最大值降级为次大值 max2nd = max1st; max1st = num; } else if (num == max1st) { // 新数等于最大值:次大值同步更新为最大值(满足重复需求) max2nd = num; } else if (num > max2nd) { // 新数介于最大值和次大值之间:更新次大值 max2nd = num; } } count++; } // 处理没有有效输入的情况 if (!hasValidInput) { System.out.println("No valid integers were entered!"); } else { System.out.println("The largest value is " + max1st); System.out.println("The second largest value is " + max2nd); } sc.close(); } }
关键逻辑说明
- 初始值处理:用第一个非0输入来初始化
max1st和max2nd,避免了负数输入的错误。 - 重复最大值处理:当输入的数等于当前最大值时,直接将
max2nd设为该值,确保最大值出现多次时,次大值和最大值一致。 - 边界情况处理:增加了
hasValidInput标记,处理用户直接输入0的情况,避免输出无意义的初始值。
测试验证
- 测试用例1:输入
75, 75, 45, 0→ 输出最大值75,次大值75(符合重复最大值需求) - 测试用例2:输入
75, 45, 75, 0→ 输出最大值75,次大值75 - 测试用例3:输入
5, 3, 2, 0→ 输出最大值5,次大值3 - 测试用例4:输入
-5, -3, -1, 0→ 输出最大值-1,次大值-3 - 测试用例5:输入
9, 0→ 输出最大值9,次大值9(单个有效输入的合理输出)
内容的提问来源于stack exchange,提问作者Joshua Salcedo
相关产品推荐
相关产品推荐

