Java 数字列表中最小的和第二小的

Java 数字列表中最小的和第二小的,java,Java,问题2 在twosmal.java文件中编写程序 输入一组正整数,以-1结尾作为前哨。按顺序打印这些数字中的最小值和次最小值 你可以假设在-1之前至少有两个数字;你不必检查这是真的 public class TwoSmall{ public static void main(String [] args){ int min; int secondMin; int sentinel = -1; System.out.pri

问题2 在twosmal.java文件中编写程序

输入一组正整数,以-1结尾作为前哨。按顺序打印这些数字中的最小值和次最小值

你可以假设在-1之前至少有两个数字;你不必检查这是真的

public class TwoSmall{

    public static void main(String [] args){
        int min;
        int secondMin;
        int sentinel = -1;

        System.out.println("Enter atleast two numbers");    
        int input = IO.readInt();

        min = input;
        secondMin = input;

        do{

                if(input < min){
                    secondMin = min; 
                    min = input;
                }

                else if (input < secondMin) {
                    secondMin = input; 
                }
                input = IO.readInt();
            } while(input!=sentinel);

            System.out.println(min);
            System.out.println(secondMin);
    }

}
公共类TwoSmall{
公共静态void main(字符串[]args){
int-min;
int第二分钟;
int-sentinel=-1;
System.out.println(“输入至少两个数字”);
int input=IO.readInt();
最小值=输入;
第二分钟=输入;
做{
如果(输入<分钟){
第二分钟=分钟;
最小值=输入;
}
否则如果(输入<秒分钟){
第二分钟=输入;
}
输入=IO.readInt();
}while(输入!=sentinel);
系统输出打印项次(最小值);
系统输出打印项次(秒分钟);
}
}

这不管用吗?有人能告诉我这个程序有什么问题吗?

这是因为您将
min
secondMin
都设置为第一个输入的值。除非输入的数字小于该值,否则将出现问题。试着分别阅读这两个数字

min = IO.readInt();
secondMin = IO.readInt();
另外,重新思考你的逻辑。你可能会得到一个倒退的结果。解决此问题的一种方法是读取前两个整数,然后将它们相应地分配给
min
secondMin
。否则,如果用户输入4,3,2——结果会说3是最低的,2是第二低的——这是不正确的


@vandale提到的另一个选项是将它们都初始化为
INTEGER.MAX\u VALUE
。如果这样做,您就不需要读取
min
secondMin

的初始值。您是否尝试过一步一步地检查它,或者在头脑中仔细思考,或者在整个程序流中使用print语句跟踪它,或者使用实际的调试器?IO.readInt一次只读取1 int,但现在您正在设置min和secondMin以在阅读后输入。您不应该为这些变量中的每一个调用两个IO.readInt吗?您能详细说明它是如何失败的吗?“这不起作用”请描述您输入的内容,以及输出是什么。另一个选项是将它们初始化为
整数,最大值