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

Java作业求助:无数组实现最大次大值查找(含重复最大值处理)

解决Java找最大值和次大值(含重复最大值处理)的问题

我来帮你搞定这个问题!你的代码已经实现了基础功能,但在重复最大值的处理和初始值设置上存在两个关键问题,咱们一步步来修正:

原代码的核心问题

  1. 初始值不合理:你把max1st和max2nd初始化为0,如果用户输入的全是负数,0会被错误地当成最大值。
  2. 重复最大值逻辑缺失:当输入的数等于当前最大值时,没有同步更新次大值,导致次大值停留在初始值或之前的较小值。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:57:58