我看过这里发布的答案(finding smallest and second smallest number),但我无法让我的代码发挥作用。
这就是我所拥有的。
public static void shortestTimes(int[] times){
int counter = 0;
int secondLowest = times[counter];
int min = times[counter];
for (counter = 0; counter < times.length; counter ++) {
if (times[counter] < min) {
secondLowest = min;
min = times[counter];
} else if (times[counter] < secondLowest) {
secondLowest = times[counter];
}
}
System.out.println("The fastest time was: " + min + ". And the second fastest was: " + secondLowest);
}
当我输入输入时:
int[] values = {1, 3, 3, 2, 5};
longestTimes(values);
我得到了输出:
The fastest time was: 1. And the second fastest was: 1
为什么我的第二低数字没有改变?
答案 0 :(得分:1)
您的第二个最低值没有改变,因为从一开始您将secondLowest
设置为等于值[0]的值,这是数组中的最低值。如果我是你,我会将min
和secondLowest
初始化为Integer.MAX_VALUE
。然后算法将按预期运行
答案 1 :(得分:0)
首先,当您声明min
和secondLowest
时,我会检查times.length >= 2
。
然后我会给他们分配:
min = times[0];
secondLowest = times[1];
问题出在你的secondLowest
声明以及它们都是从最低值开始的事实。您没有进行任何检查以查看min
和secondLowest
是否指的是数组中的相同数字。
如果确保数组包含唯一值,则这不是问题,但如果不是,则应更改搜索。对数组进行排序也会有所帮助。