2017-03-06 5 views
1

Ich habe die folgende Methode in einer meiner Klassen namens Board. Board hat eine Reihe von 120 Squares, was eine weitere Klasse aus meinem Programm ist.Wert ändert sich nicht korrekt im Array

public class Board{ 

private Square[] square = new Square[120]; 
... 

Jedes Quadrat hat eine int-Zeile und eine int-Spalte.

public class Square extends JButton{ 
public int row; 
public int column; 
... 

Das Verfahren selbst die Zeile und Spalte, um herauszufinden, soll, was in

void setSquares() { 
    int ones; 
    int tenths; 
    Square s = new Square(); 
    Insets squareMargin = new Insets(5, 5, 5, 5); 
    s.setMargin(squareMargin); 
    for (int i = 0; i < square.length; i++){ 

     ones = getNdigit(i, 1); 
     tenths = getNdigit(i, 2); 

     //set row && set column 
     if ((tenths >= 2 && tenths <= 9) && (ones >= 1 && ones <= 8)){ 
      s.row = tenths - 1; 
      s.column = ones; 

     } else{ 
      s.row = 0; 
      s.column = 0; 
     } 
     square[i] = s; 
     System.out.println(square[0].toString()); 

    } 

So am Ende des Verfahrens für jeden Platz ist, erwarte ich, dass Platz [34] eine Zeile hat von 2 und einer Spalte von 4. Jedoch ist das tatsächliche Ergebnis immer das gleiche wie wo die for-Schleife endete (Quadrat [34] hat eine Zeile und eine Spalte von 0). Wenn die for-Schleife geändert wurde

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

dann square [34] hat eine Reihe von 4 und eine Spalte von 4.

+0

referenzieren 1. Sie haben vergessen, eine Frage zu stellen. 2. Welcher Wert ändert sich nicht richtig? Geben Sie Beispiel Eingabe und Ausgabe (sowohl erwartet und tatsächlich erhalten) – UnholySheep

+0

Der Wert der beiden Spalten und int wurde nicht korrekt geändert, meine Frage war warum. Ich habe Beispieldaten im letzten Absatz zur Verfügung gestellt. – Snow

Antwort

2

Sie sind nur eine Instanz von Square und verwenden es in den für die Schleife zu schaffen . Verschieben Sie die Instanziierung in die for-Schleife, damit jede gespeicherte Instanz unterschiedlich ist.

Um Ihre Frage im Kommentar antworten:

Square s = new Square(); 

Ordnet etwas Platz im Speicher der Square Instanz zu speichern (wo man Werte an ihre Mitglieder festlegen können). so jetzt s verweist auf diesen Speicherplatz im Speicher.

square[i] = s; 

so jetzt square[i] Referenzen, die denselben Raum (also die gleichen Elementwerte aufweisen). Also für alle i alle square[i] Referenzen auf den gleichen Ort (die gleiche Instanz von Square). Aber wenn Sie s eine jede Iteration zuweisen, dann wird s ein neues Quadrat referenzieren und jedes square[i] wird eine andere Square Instanz

+0

Das ist alles was ich tun musste. Ich bin erstaunt. Stört es dich wenn ich frage warum passiert das? Der Wert von s ändert sich in jeder Schleife, warum ändert sich das Quadrat [i] damit? – Snow

+0

@Snow Schauen Sie sich die Bearbeitung Ihrer Frage an – giorashc

+0

Das macht jetzt so viel Sinn. Ich habe meinen Kopf jetzt stundenlang gegen die Wand geschlagen, und du bist gerade hereingekommen wie eine Portion Vicodin. Ich kann nicht genug dankbar sein. – Snow

Verwandte Themen