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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:43:30