2016-09-22 84 views
0

我试图初始化一个对象的二维数组,我创建了一个具有一些参数(x,y,宽度,高度)但不起作用的对象...该对象只是一个g。 fillOval,当我做初始化时只打印数组的最后一个对象。如何初始化创建的对象的二维数组?

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 ..没有一个椭圆形的实例。

因为每个变量只有一个副本,所以每次创建一个新的椭圆时,都会覆盖上一个值集。当你最后去画椭圆时,所有的人都会被画在同一个地方!

让他们的实例变量来代替:

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

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

我尽量避免谈论“被所有实例共享”的静态字段 - 它意味着必须有*实例。我更喜欢将它们想象为“不与*任何*实例关联”。 –

+0

@JonSkeet谢谢你的收获!编辑:) – flakes