2017-12-30 31 views
0

Ich versuche, ein 9x9 Raster von TextFields zu erstellen, die alle in einem Array sind. Die obere linke Seite würde Felder [1] [1] und die unteren rechten Felder [9] [9] heißen. Der Code, den ich bisher geschrieben habe, istErstellen mehrerer textFields mit einem Array

int NUM_FIELDS_X = 1; //x textField 
    int NUM_FIELDS_Y = 1; // y textField 
    int x = 21; // x location of textField 
    int y = 21; // y location of textField 

    TextField[][] fields = new TextField[NUM_FIELDS_X][NUM_FIELDS_Y]; { 
     for (NUM_FIELDS_Y =1; NUM_FIELDS_Y <= 9; NUM_FIELDS_Y++) { 

      for (NUM_FIELDS_X =1; NUM_FIELDS_X <= 9; NUM_FIELDS_X++) { 

        fields[NUM_FIELDS_X][NUM_FIELDS_Y] = new TextField(); 

        fields[NUM_FIELDS_X][NUM_FIELDS_Y].setColumns(10); 
        fields[NUM_FIELDS_X][NUM_FIELDS_Y].setBounds(x, y, 32, 32); 
        frame.getContentPane().add(fields[NUM_FIELDS_X][NUM_FIELDS_Y]); 

        x=x+32; 
       } 
      y = y+32; 
     } 
    } 

aber ich erhalte eine Fehlermeldung, sobald ich es starten, und die for-Schleifen beginnen nicht. Die Fehlermeldung im Empfangs

ist
java.lang.ArrayIndexOutOfBoundsException: 1 
at sudokuSolver.sudokuInterface.initialize(sudokuInterface.java:70) 
at sudokuSolver.sudokuInterface.<init>(sudokuInterface.java:44) 
at sudokuSolver.sudokuInterface$1.run(sudokuInterface.java:31) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

Danke für die Hilfe Akash Jha und Coder-croc, ich habe es geschafft, es zu beheben. Ich habe den Code

int NUM_FIELDS_X = 0; //x number of textField 
    int NUM_FIELDS_Y = 0; // y number of textField 
    int x = 21; // x location of textField 
    int y=21; // y location of textField 



    TextField[][] fields = new TextField[9][9]; { 
     for (NUM_FIELDS_Y =0; NUM_FIELDS_Y < 9; NUM_FIELDS_Y++) { 
      x=21; 
      for (NUM_FIELDS_X =0; NUM_FIELDS_X <= 8; NUM_FIELDS_X++) { 

        fields[NUM_FIELDS_X][NUM_FIELDS_Y] = new TextField(); 

        fields[NUM_FIELDS_X][NUM_FIELDS_Y].setColumns(10); 
        fields[NUM_FIELDS_X][NUM_FIELDS_Y].setBounds(x, y, 32, 32); 
        frame.getContentPane().add(fields[NUM_FIELDS_X][NUM_FIELDS_Y]); 

        x=x+32; 
       } 
      y = y+32; 
     } 
    } 
+0

Eigentlich wäre oben links 'fields [0] [0]' und unten rechts 'fields [8] [8]'. Arrays sind in Java nullbasiert. Auch, _ "Ich bekomme einen Fehler" _ ist nicht ausreichend. Würden Sie Ihr Auto zur Reparatur bringen und sich weigern, dem Mechaniker die Symptome zu erklären? Bitte posten Sie die komplette Fehlermeldung und stapeln Sie den Trace, indem Sie Ihre Frage bearbeiten. Formatieren Sie den Stack-Trace als Code. –

+0

@JimGarrison das ist der Grund, warum ich sowohl NUM_FIELDS_X als auch Y am Anfang auf 1 setze, also wäre es nicht 0 - 8 –

+0

So funktioniert Array-Deklaration nicht. Bitte lesen Sie den Java-Tutorial-Abschnitt zu Arrays erneut. Sie können den Ursprungsindex eines Arrays nicht ändern, es ist immer NULL. –

Antwort

1

Der Code helfen, die das Problem hat,

NUM_FIELDS_Y = 1; NUM_FIELDS_Y <= 9; 

Ihr Array ist von fields[0][0] zu fields[8][8] für Länge 9 (Index 0-8) und NUM_FIELDS_Y <= 9 Bedingung zugreifen gehen zu fields[9][9] und damit Sie erhalten die ArrayIndexOutOfBoundException.

Zweitens, überspringen Sie den 0. Index als NUM_FIELDS_Y =1 Zugriff auf fields[1][1] statt fields[0][0].

Ihre Schleife ändern,

int xLength = 9; 
int yLength = 9; 
TextField[][] fields = new TextField[xLength][yLength]; 
for (int x = 0; x < xLength; x++) { 
    for (int y = 0; y < yLength; y++) { 
     // your code 
    } 
} 

EDIT

Ihre Felder Array 1 Länge,

TextField[][] fields = new TextField[NUM_FIELDS_X][NUM_FIELDS_Y]; 

fields kann also nur ein 1-Element bei Index [0][0] und erste Iteration versucht auf [1][1] zuzugreifen, was inco ist richtig.

Besuchen Sie this Link, um mehr über Arrays zu verstehen.

0

geändert Sie sind eine Reihe von Ihrem Textfeld erstellen, wie [1] [1] und Sie versuchen, mehr als ein Element im Array zu setzen ... die Größe erhöhen Ihres Textfeldarrays. Das wird

+0

Also sollte ich es in TextField ändern [] [] fields = new TextField [9] [9] –

+0

Für Ihren Fall wird es in [9] [9] ändern .... –

Verwandte Themen