2016-09-22 12 views
0

いくつかのパラメータ(x、y、width、height)を持つオブジェクトの2次元配列を初期化しようとしていますが、動作しません...オブジェクトはgです。 fillOvalを実行すると、初期化すると配列の最後のオブジェクトだけが出力されます。作成されたオブジェクトの2次元配列を初期化する方法は?

Ovals = new Oval[4][4]; 
     for (int y = 0; y < 4; y++) { 
      for (int x = 0; x < 4; x++) { 
       Ovals[x][y] = new Oval(x*100, y, 30,30); 
      } 
     } 

...

for (int y = 0; y < 4; y++) { 
     for (int x = 0; x < 4; x++) { 
      Ovals[x][y].paint(g); 
     } 
    } 

オーバルクラス:

あなたのクラスの
package objectes; 

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.util.Random; 

public class Oval extends Canvas{ 

    private static Random random; 

    private static int r1 = 0; 
    private static int r2 = 0; 

    private static int x = 0; 
    private static int y = 0; 
    private static int randomN = 5; 

    public static int color; //0 = red(#FF5C5C), 1 = blue(#4097ED), 2 = green(#65EB8F), 3 = yellow(#F5F267), 4 = orange(#FFAD42) 

    public Oval(int x, int y, int r1, int r2) { 
     //Constructor 
     this.x = x; 
     this.y = y; 
     this.r1 = r1; 
     this.r2 = r2; 

     random = new Random(); 
     randomN = random.nextInt(); 
     if (randomN < 0) { 
      randomN = randomN*-1; 
     } 
     randomN = randomN % 5; 
    } 

    public void paint(Graphics g) { 
     switch (randomN) { 
     case 0: 
      g.setColor(Color.decode("#ff5C5C")); 
      break; 
     case 1: 
      g.setColor(Color.decode("#4097ed")); 
      break; 
     case 2: 
      g.setColor(Color.decode("#65eb8f")); 
      break; 
     case 3: 
      g.setColor(Color.decode("#f5f267")); 
      break; 
     case 4: 
      g.setColor(Color.decode("#ffad42")); 
      break; 
     } 
     g.fillOval(x, y, r1, r2); 
    } 
} 
+0

あなたのすべてのフィールドは静的です。それが問題です。それは配列とは関係ありません。 –

答えて

0

すべての変数が静的である。これは、彼らがクラスに関連付けられていることを意味

private static int r1 = 0; 
private static int r2 = 0; 

private static int x = 0; 
private static int y = 0; 

Oval ..一人ではない楕円形のインスタンス。

各変数のコピーが1つしかないため、新しい楕円を作成するたびに、最後の値セットを上書きします。ついに楕円形を描くと、それらはすべて同じ場所に描かれます!

ではなく、それらのインスタンス変数行います

private int r1 = 0; 
private int r2 = 0; 

private int x = 0; 
private int y = 0; 
+1

静的フィールドが「すべてのインスタンス間で共有されている」ということを避けようとしています。つまり、インスタンスが存在することを意味します。私はそれらを「*どのインスタンスにも関連付けられていない」と考えることを好みます。 –

+0

@JonSkeetキャッチしてくれてありがとう!編集済み:) – flakes

関連する問題