2017-03-06 9 views
1

Boardと呼ばれるクラスに次のメソッドがあります。ボードには私のプログラムの別のクラスである120の正方形の配列があります。配列内の値が正しく変更されていません

public class Board{ 

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

各正方形には、int行とint列があります。

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

方法自体はそう方法の終了時に行と列が

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()); 

    } 

内部毎スクエアのためのものであるかを把握することになって、私は正方形[34]の行を有することを期待しますしかし、実際の結果は、forループが終了した場所と同じです(square [34]は0の行と列を持ちます)。 forループ

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

に変更した場合、正方形[34]あなたはSquareのインスタンスを1つだけ作成し、用ループを通してそれを使用している4行及び4

+0

1.質問をするのを忘れました。 2.どのような価値が正しく変化していないのですか?サンプルの入力と出力を提供する(期待値と実際に受け取った値の両方) – UnholySheep

+0

intとcolumnsの両方の値が正しく変更されていない。私は最後の段落でサンプルデータを提供しました。 – Snow

答えて

2

の列を有します。各インスタンスが格納されるように、インスタンス化をforループ内に移動します。

コメントにあなたの質問に答えるために:

Square s = new Square(); 

は(あなたがそのメンバーに値を設定することができます)Squareインスタンスを格納するためのメモリの一部の領域を割り当てます。だから今sはメモリ内のそのスペースを参照しています。

square[i] = s; 

同じ空間今square[i]参照(従って同一の部材値を有します)。すべてiのすべてsquare[i]の同じ場所への参照(同じ例:Square)。しかし、sに1回の反復を割り当てると、sは新しい四角形を参照し、各square[i]は異なるSquareインスタンスを参照します

+0

これは私がする必要があったすべてです。私は驚いています。私はなぜこれが起こるのか聞いてもらえますか? sの値はすべてのループで変化し、なぜsquare [i]はそれに伴って変化するのですか? – Snow

+0

@Snowあなたの質問に答える編集を見てください – giorashc

+0

これは今非常に意味があります。私は何時間も壁に頭をぶつけていました。ちょうどVicodinのように入ってきました。私は十分に感謝することはできません。 – Snow

関連する問題