所以我的代码适用于所有测试用例,除非只有两个整数。 例如,如果用户输入:将数字终止为-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);
}
}
答案 0 :(得分:0)
您的代码存在的问题在于将两个最小值设置为首次输入的数字。这很糟糕,因为如果用户首先输入最小值,则min
和min2
都已包含最小值。这意味着条件input < min2
始终为false
,导致min2
始终包含用户首先输入的值。
要解决此问题,只需将min2
的值设置为大于用户可以输入的任何其他值的值(例如Double.MAX_VALUE
或Double.POSITIVE_INFINITY
)。
正如有关代码错误处理部分的提示:如果在提醒用户输入无效后再次致电main
,请确保在该通话后面添加return
或在调用main
方法完成后,执行将继续。像这样:
if (count < 2) {
IO.reportBadInput();
main(args);
return;
}