我在使用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));
}
答案 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);