2016-06-19 10 views
0

Ich versuche, das unten Programm finden,kann nicht die Ursache für java.lang.ArrayIndexOutOfBoundsException

public class Ocerloading { 

    public static void main(String[] args) { 
     int[] month_days = new int[12]; 
     String[] month_name = { "January", "February", "March", "April", "May", "June", "July", "August", "September", 
       "October", "November", "December" }; 

     for (int i = 0; i < 12; i++) { 

      if (i == 1) { 
       month_days[i] = 28; 
       continue ; 
      } 

      if (i <= 6) { 
       if (i % 2 == 0) 
        month_days[i] = 31; 

       else 
        month_days[i] = 30; 
      } else { 
       if (i % 2 == 0) 
        month_days[i] = 30; 

       else 
        month_days[i] = 31; 
      } 
     } 

     for (int x : month_days) { 
      System.out.println(month_days[x]); 

     } 


    } 

} 

Es gibt den folgenden Fehler,

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 31 
    at Ocerloading.main(Ocerloading.java:32) 

ich, dass dieser Fehler verstehen laufen tritt auf, wenn wir versuchen, auf ein Array-Element zuzugreifen, das sich außerhalb des Bereichs befindet. Aber das scheint nicht gültig zu sein.

Ich habe die Ausgabe bearbeitet.

+0

Wo ist Zeile 7? – Stewart

+1

Erans Antwort ist korrekt. Sie könnten dies ganz einfach entdeckt haben, indem Sie einen Debugger verwenden, um durch Ihren Code zu gehen und den Wert von "x" vor der Ausnahme zu verwenden. Die Verwendung eines Debuggers ist eine Schlüsselqualifikation für einen Programmierer, nicht etwas, was man später lernen sollte. Sobald Sie es geschafft haben, Code zu schreiben, der kompiliert, ist es an der Zeit zu lernen, wie Sie mit einem Debugger durch diesen Code gehen können. –

+1

@Stewart, wie erwähnt, erwähnt EnhancedForLoop und daher höchstwahrscheinlich die Zeile 'for (int x: monate_days) {...' – Sid

Antwort

2

Sie haben die erweiterte for-Schleife falsch verstanden. Es iteriert über die Elemente des Arrays, nicht ihre Indizes.

es sein sollte:

for (int x : month_days) { 
    System.out.println(x); 
} 
0

Die enhanced for loop, eingeführt in Java 5, können Sie die Elemente des Arrays gibt. Sie erwarten, dass es Indizes wie eine herkömmliche for-Schleife gibt.

z.B.

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

Oben wird funktionieren, weil wir Indizes nehmen.

In Ihrem Fall die folgende Änderung:

for (int x : month_days) { 
    System.out.println(x); 
} 

Dies liegt daran, hier x nicht der Array-Index ist, sondern x ist der in month_days Array gespeichert Istwert. Also, wenn es versucht, month_days[12] zu finden, schlägt es fehl, weil month_days Größe 12 und damit 0-11 Indizes hat.

+1

Holly Molly Zuckerlolly, ist diese Antwort falsch? Downvoters bitte auch etwas Feedback hinzufügen. Hilft mir und SO zu verbessern. Danke. – Sid

+0

Bitte versuchen Sie, Duplikate zu finden, bevor Sie eine Antwort posten. Ich habe buchstäblich 'ArrayIndexOutOfBoundsException foreach' in die Suche geschrieben und den verlinkten Post oben gefunden. Wir brauchen nicht Hunderte von Kopien derselben Frage. –

+0

Einverstanden, wird folgen. Danke für den Kommentar. – Sid

Verwandte Themen