阵列中最小和第二小的

时间:2015-03-10 05:23:15

标签: java sorting

我看过这里发布的答案(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

为什么我的第二低数字没有改变?

2 个答案:

答案 0 :(得分:1)

您的第二个最低值没有改变,因为从一开始您将secondLowest设置为等于值[0]的值,这是数组中的最低值。如果我是你,我会将minsecondLowest初始化为Integer.MAX_VALUE。然后算法将按预期运行

答案 1 :(得分:0)

首先,当您声明minsecondLowest时,我会检查times.length >= 2

然后我会给他们分配:

min = times[0];
secondLowest = times[1];

问题出在你的secondLowest声明以及它们都是从最低值开始的事实。您没有进行任何检查以查看minsecondLowest是否指的是数组中的相同数字。

如果确保数组包含唯一值,则这不是问题,但如果不是,则应更改搜索。对数组进行排序也会有所帮助。