2017-02-25 3 views
-3

Ich habe vor kurzem an ein wenig Java-Code gearbeitet und scheint, als wäre ich festgefahren.Java ArrayIndexOutOfBounds Fehler für Array, das nicht gehen sollte Grenzen

Hier ist mein Code:

public class Test { 

    static private int arraySize; 
    public Test(int arrayS){ 
     arraySize = arrayS; 

    } 
    int []ma = new int[arraySize]; 
    public static void main(String[] args){ 


    } 
    public void increment(){ 
    int count = arraySize - 1; 
    ma[count - 1] += 1; 
    while(count!= 0){ 
     if(ma[count] > 9){ 
      ma[count] =0; 
      ma[count - 1] +=1; 
     } 
    count -=1; 
     } 
    if(ma[0] > 9){ 
    ma[0] = 0; 

    } 

    } 

    } 




class Trial 
{ 
    public static void main(String[] args) 
    { 
    Test z = new Test(2); 
    System.out.println(z); 

    z.increment(); 
    System.out.println(z); 

} 
} 

Diese Linie insbesondere: ma[count - 1] += 1;

Hält außerhalb der Grenzen gehen, wenn Test versucht es aus irgendeinem Grund t zu bauen. Ich erhalte diese Fehlermeldung:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

ich wirklich jede mögliche Hilfe schätzen würde, die Sie ersparen könnte, weil ich keinen Grund, zu finden scheinen, warum das Array-Grenzen abgehend würde. Meinen Dank.

+1

poste deinen Code hier – Kaushal28

+0

Theres eine Menge fehlender Code Buddy ... Bitte setzen Sie den ganzen Code, so können wir versuchen zu verstehen, zB Ihre Test Konstruktor fehlt – Kushan

+0

Weisen Sie das Array innerhalb des Konstruktors. Ich denke, das Problem tritt auf, weil die Größe statisch ist und vorher initialisiert wurde. Das führt dazu, dass das Array mit der Größe 0 initialisiert wird. 0 – Kushan

Antwort

0

Zunächst einmal gibt es in Ihrer Testklasse keinen parametrisierten Konstruktor. Wie Sie Objekt erstellen new Test(2);

Zweitens verwenden Sie global int []ma = new int[arraySize]; Null Dieses Mal Arraysize mit dem Wert initialisiert werden.

Put ma=new int[arraySize]; in Ihrem Konstruktor, nachdem Sie Wert von arraySize von arrayS Wert

+0

Entschuldigung, es gab ein kleines Problem beim Schreiben hier, der Konstruktor sollte jetzt da sein. –

0

Da Arraysize eine statische Instanz-Variable ist, wird es auf 0 initialisiert werden, wenn das Programm gestartet wird, und daher hat die ma eine Größe von 0

Deshalb bestimmt wird, wenn Sie ma Zugriff auf [0] erhalten Sie einen Fehler

es zu beheben, müssen Sie ma in Ihrem Konstruktor

static private int arraySize; 
    public Test(int arrayS){ 
     arraySize = arrayS; 
     ma = new int[arrayS]; 
    } 
    int []ma; 
initialisieren
0

Sie initialisieren ArraySize und ma Inline. Daher wird arraySize mit 0 initialisiert (nicht NULL) und dann wird Ihr Array mit einer Kapazität von 0 initialisiert. Sie sollten Ihr Array innerhalb des Konstruktors initialisieren.

Verwandte Themen