" ArrayIndexOutOfBoundsException异常" java中的错误

时间:2015-03-31 09:31:34

标签: java

该程序应该在数组中找到Max和Min, 但它发送错误:
 “线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:23     在Mine_EnhancedForLoop.main(Mine_EnhancedForLoop.java:17)
有谁知道,问题是什么?

public class Mine_EnhancedForLoop {

    public static void main(String[] args) {

            int[] array1 = {23, 98, 10, 1, 45, 2, 7, 90};

            int max = array1[0];
            int min = array1[0];

            for (int i : array1){

                if (array1[i] > max)
                    max = array1[i];

                else if (array1[i] < min)
                    min = array1[i];
            }
            System.out.println("Maximum is: " + max);
            System.out.println("Minimum is: " + min);
    }
}

6 个答案:

答案 0 :(得分:6)

for (int i : array1)中,i是数组中包含的值,而不是数组的索引。因此,array1[i]将抛出i >= array1.length时出现的异常(对于输入数组中的大多数值都是如此)。

如果您不需要知道最高和最低值的索引,这将有效:

        for (int i : array1) {
            if (i > max)
                max = i;
            else if (i < min)
                min = i;
        }

答案 1 :(得分:2)

for (int i : array1)

i给出数组的元素而不是数组的索引

所以在第一次迭代中

if(array1[23] > max)  //gave you ArrayIndexOutOfBoundsException 23

你可以做到

 int[] array1 = {23, 98, 10, 1, 45, 2, 7, 90};

 int max = array1[0];
 int min = array1[0];

 int i=0;

 while(i< array1.length){

      if (array1[i] > max)
           max = array1[i];

     else if (array1[i] < min)
           min = array1[i];

         i++;
      }
 System.out.println("Maximum is: " + max);
 System.out.println("Minimum is: " + min);

Demo

答案 2 :(得分:1)

您必须将数组元素迭代为:

for (int i=0; i<array1.length; i++){
    if (array1[i] > max)
        max = array1[i];
    else if (array1[i] < min)
        min = array1[i];
}

答案 3 :(得分:1)

将for循环更改为

for (int i = 0; i < array1.length; i++) {
    if (array1[i] > max) {
        max = array1[i];
    } else if (array1[i] < min)
        min = array1[i];
    }
}

答案 4 :(得分:1)

因为变量i在此处进行比较if (array1[i] > max)时包含23,因此array1 [23]给出了异常。

在数组上循环:

for (int i = 0; i < array1.length; i++) {
    if (array1[i] > max)
        max = array1[i];

    else if (array1[i] < min)
        min = array1[i];
}

答案 5 :(得分:1)

实际上使用Java 8流要容易得多:

int[] array1 = {23, 98, 10, 1, 45, 2, 7, 90};
System.out.println("Maximum is: " + Arrays.stream(array1).max().getAsInt());
System.out.println("Minimum is: " + Arrays.stream(array1).min().getAsInt());