查找数组中最高值的索引(Java)

时间:2015-02-28 20:21:04

标签: java arrays indexing

现在已经在Java问题上工作了一段时间。在获取与最高值对应的数组索引时遇到一些问题。我非常确定我理解这样做的逻辑,因为我成功检索到包含最低值的索引。这就是我所拥有的:

public static void main(String[] args) {
    double array[] = {1.12, 2.24, 3.36, 0.48, 2.00, 5.00, 12.12, 1.48, 3.12, 3.24, 6.6, 1.12};


    double highestValue = array[0];
    int highIndex = 0;

    for (int i = 0; i < array.length; i++) {
       if (array[i] > highestValue) 
           highIndex = i;
    }
   System.out.println(highIndex);

}

但是,对于这个数组,我的代码返回索引10,对应于6.6。但是,在索引6中,数组中的最高值为12.12。为什么我一直将10作为最高指数?如果我颠倒逻辑,代码适用于检索最低索引,但我不确定我在这里做错了什么。谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

因为您忘记更新最高价值。

添加以下行:

highestValue = array[i];

将您的代码更改为:

   if (array[i] > highestValue) {
        highIndex = i;
        highestValue = array[i];   //Add this line
   }

如果您未更新最高值,则始终与数组中的第一个元素进行比较。

<强>证明:

Comparing 1.12 with 1.12
Comparing 2.24 with 1.12
2.24 is higher.
Comparing 3.36 with 1.12
3.36 is higher.
Comparing 0.48 with 1.12
Comparing 2.0 with 1.12
2.0 is higher.
Comparing 5.0 with 1.12
5.0 is higher.
Comparing 12.12 with 1.12
12.12 is higher.
Comparing 1.48 with 1.12
1.48 is higher.
Comparing 3.12 with 1.12
3.12 is higher.
Comparing 3.24 with 1.12
3.24 is higher.
Comparing 6.6 with 1.12
6.6 is higher.
Comparing 1.12 with 1.12

如何找到错误:

您可以通过在代码中添加几行println语句来进行自己的测试。 (使用调试器的替代方法)

for (int i = 0; i < array.length; i++) {
   System.out.println("Comparing " + array[i] + " with " + highestValue);
   if (array[i] > highestValue) {
        highIndex = i;
        //highestValue = array[i];
        System.out.println(array[i] + " is higher.");
   }           
}

答案 1 :(得分:2)

您忘了更新highestValue。因此,i高于array[i]的每个array[0]都会导致更新highIndex。 10是最后一个这样的指数。

您的代码应如下所示:

for (int i = 0; i < array.length; i++) {
   if (array[i] > highestValue) {
       highIndex = i;
       highestValue = array[i];
   }
}

答案 2 :(得分:-1)

您的重点仅在于从数组中获取索引,但是您忘记更新保存高值的highestValue变量:

for (int i = 0; i < array.length; i++) {
   if (array[i] > highestValue ){            
       highIndex = i;
       highestValue=array[i];
   }
}