问题2 将您的程序写在TwoSmall.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);
}
}
这不行?有人能告诉我这个程序有什么问题吗?
答案 0 :(得分:2)
这是因为您将min
和secondMin
都设置为等于第一个输入的值。除非输入的数字小于该值,否则您将遇到问题。尝试分别阅读这两个数字。
min = IO.readInt();
secondMin = IO.readInt();
另外,重新考虑你的逻辑。你可能会得到一个倒退的结果。解决此问题的一种方法是读取前两个整数,然后相应地将它们分配给min
和secondMin
。否则,如果用户输入4,3,2 - 结果将表示3是最低的,而2是第二低 - 这是不正确的。
@vandale提到的另一个选择是将它们初始化为INTEGER.MAX_VALUE
。如果您这样做,则无需读取min
和secondMin
的初始值。