使用增强型for循环返回数组

时间:2016-08-08 20:55:25

标签: java

我在使用foreach循环查找数组中最大数字的索引时遇到问题。

我得到了:"线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:5"

如果有人可以帮助我,我真的很感激。谢谢!这是我的代码:

   public static int enhanIntMax(int[] a){
    int largeIndex =0;
    int largeArrnum=scores[0];
    for( int i : a){
        if(a[i] >largeArrnum){``
            largeArrnum += a[i];
            largeIndex += i;

        }
    }
    return largeIndex;
        }

  public static void main(string[] args){
  int[] a={1,2,3,4,5};
 System.out.println(enhanInMax(a));
}

3 个答案:

答案 0 :(得分:0)

我确定你已经从评论中解决了问题,但问题是:

if(a[i] > largeArrnum)

不会尝试将元素与i的值与largeArrnum进行比较,而是将a的第i个元素进行比较。通过使用增强的for循环," for(int i = 0; i< blah blah blah ..."循环的一部分是为你处理的。而不是遍历数组的索引,增强循环遍历其内容。因此,如果a [i]的值大于长度,则会出现此错误。修复它的正确方法是仅替换&#34 ; a [i]" with" i",但您可能希望先对此网站进行快速审核: https://blogs.oracle.com/CoreJavaTechTips/entry/using_enhanced_for_loops_with

答案 1 :(得分:0)

for-each循环不会为您提供直接访问当前索引的方法。所以你必须自己跟踪它。例如,p

之类的东西
public static int enhanIntMax(int[] a) {
    int p = 0, largeIndex = 0, largeArrnum = a[0];
    for (int i : a) { // <-- for each int i in a
        if (i > largeArrnum) { // <-- if the value is greater then
            largeArrnum = i; // <-- update the value
            largeIndex = p; // <-- update the largest index
        }
        p++; // <-- update the position p.
    }
    return largeIndex; // <-- return the largest index.
}

注意这是两者更容易阅读,而且效率稍高(因为它会跳过将元素0与自身进行比较)与常规{{1像

一样循环
for

答案 2 :(得分:-1)

使用Java 8,您现在可以使用:

int maxint = Arrays.stream(A)
               .max()
               .getAsInt();
  int index = Arrays.asList(A).indexOf(maxInt);