0

我试图在整数数组中找到最小值,但是当我这样做时,我在一个地方得到了一个 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);
    }
}
4

3 回答 3

3

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

if(i < minste) {

这个循环的意思是:“For each intin tall”。

为了更好地理解增强的循环,这样想:

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

将打印与以下内容相同的内容:

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

这就是为什么建议对变量使用有意义的名称,而不是i, use item,所以它就像“for each itemin tall”...

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

  1. 利用Arrays#sort
  2. 返回数组中的第一个元素
于 2013-10-14T10:43:54.307 回答
2

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

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

tall[i]- 给出 ArrayIndexOutOfBoundsException,因为i它是数组中的一个元素,而不是索引值。这个值i绝对超过你的数组的长度。

你需要做的就是这个

int minste = tall[0]; 
for (int i : tall) { 
    if(i < minste) { 
        minste = i; 
    }
}
于 2013-10-14T10:44:11.970 回答
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]; 
    }
}
于 2013-10-14T10:47:49.333 回答