我在尝试查找最小值数组时遇到异常

时间:2013-10-14 10:43:03

标签: java arrays

我试图找到一个整数数组中的最小值,但是当我这样做时,我会在一个地方得到一个arrayindexoutofbounds,据我所知,不应该计算数组索引,只有一个比较指数和最小值。 下面有问题的部分代码:

    }
    System.out.println(sum);

    int minste=tall[0]; 
    for (int i : tall){ 
        if(tall[i]<tall[0]){ //This is where the exception is made. But why?
        minste=tall[i]; 
        }
    }
    System.out.println(minste);
    }
}

3 个答案:

答案 0 :(得分:3)

i已经是一个元素,只需使用它。无需tall[i]

if(i < minste) {

此循环表示:“对于int中的每个tall

为了更好地理解增强型循环,请以这种方式思考:

for(int i = 0; i < tall.length; i++) {
   System.out.println(tall[i]); 
}

将打印相同的内容:

for(int i : tall) {
   System.out.println(i);
}

这就是为什么建议为变量使用有意义的名称而不是i,使用item,因此它会像item中的每个tall一样}” ...

找到最小值的替代解决方案:

  1. 使用Arrays#sort
  2. 返回数组中的第一个元素

答案 1 :(得分:2)

当您使用for-each循环时,为什么要使用索引?

if(tall[i]<tall[0]){

tall[i] - 给出ArrayIndexOutOfBoundsException,因为i是数组中的元素而不是索引值。而且值i肯定超过了数组的长度。

你需要做的就是thi

int minste = tall[0]; 
for (int i : tall) { 
    if(i < minste) { 
        minste = i; 
    }
}

答案 2 :(得分:0)

您正在使用for-each循环,但尝试使用i作为索引。 要正常工作,请将代码更改为

int minste = tall[0]; 
for (int i : tall)
{ 
    if(i < minste)
    {
        minste = i; 
    }
}

int minste = tall[0]; 
for (int i = 0; i<tall.length; i++)
{ 
    if(tall[i] < minste)
    {
        minste = tall[i]; 
    }
}