2016-09-22 70 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