Java:两个最小的数字

时间:2015-10-14 21:53:12

标签: java

所以我的代码适用于所有测试用例,除非只有两个整数。 例如,如果用户输入:将数字终止为-1,然后输入1,2然后再次-1,最小数字为1,1而不是1,2

终止号码只是结束序列/程序的方法。

public static void main(String[] args) {
        double num;
        double min = 0;
        double min2 = 0;

        System.out.println("Enter terminating value:");
        int term = IO.readInt();

        System.out.println("Enter next value:");
        num = IO.readDouble();

        if(num == term){
            IO.reportBadInput();
            main(args);
        }

        int count = 0;
        min = num;
        min2 = num;

        do{
            num = IO.readDouble();

            if(num!= term && num < min) {
                min2 = min;
                min = num;
            }
            else if (num!= term && num < min2) {
                min2 = num;
            }
            count++;
        }while (num != term);

        if(count < 2){
            IO.reportBadInput();
            main(args);
        }

        else{
        IO.outputDoubleAnswer(min);
        IO.outputDoubleAnswer(min2);
        }

    }

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题在于将两个最小值设置为首次输入的数字。这很糟糕,因为如果用户首先输入最小值,则minmin2都已包含最小值。这意味着条件input < min2始终为false,导致min2始终包含用户首先输入的值。

要解决此问题,只需将min2的值设置为大于用户可以输入的任何其他值的值(例如Double.MAX_VALUEDouble.POSITIVE_INFINITY)。

正如有关代码错误处理部分的提示:如果在提醒用户输入无效后再次致电main,请确保在该通话后面添加return或在调用main方法完成后,执行将继续。像这样:

if (count < 2) {
    IO.reportBadInput();
    main(args);
    return;
}