2015-03-31 7 views
-1

Эта программа должна найти Макс и Мин в массиве, но отправить сообщение об ошибке:
"Exception в потоке„главный“java.lang.ArrayIndexOutOfBoundsException: 23 в Mine_EnhancedForLoop .main (Mine_EnhancedForLoop.java:17) "
Кто-нибудь знает, в чем проблема?ошибка «ArrayIndexOutOfBoundsException» в Java

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); 
    } 
} 
+0

Пример # 4725 почему Java не является такой же, как JavaScript. – Phylogenesis

ответ

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; 
     } 
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

1

Вы должны перебирать элементы массива, как:

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

Измените цикл для

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

Поскольку переменная i содержит 23, делая сравнение здесь if (array1[i] > max), поэтому 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]; 
} 
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()); 
Смежные вопросы