2015-06-02 185 views
0

我正在用java swing製作一個ludo遊戲(用於CPU和人類玩家),使用Jframe。總共有70個移動按鈕,我試圖製作三個數組,其中兩個用於保存兩個玩家的標記位置,第三個用於保存所有按鈕,但似乎存在問題。奇怪的陣列故障

private static javax.swing.JButton B1; 
private static javax.swing.JButton B10; 
private static javax.swing.JButton B11; 

等等...

static JButton[] allButtons = {B9, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B26, B27, 
      B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, 
      B47, B48, B49, B50, B51, B52, B53, B54, B55, B56, B57, B58, B59, B60, B61, B62, B63, B64, B65, 
      B66, B67, B68, B69, B70}; 
static JButton[] positionsA = {null, null, null, null}; 
static JButton[] positionsB = {B40, null, null, null}; 

現在的問題是這樣的語句返回false

JButton moverB(){ 
System.out.println(allButtons[31]==positionsB[0]); 
} 

這兩個指標是指B40

+3

初始化和調用'moverB'之間會發生什麼?做任何其他修改任何數組? – dkatzel

+0

數組沒有以任何方式修改。 – Yottr

+7

在將按鈕放入數組之前,您是否初始化了'B#'變量? – khelwood

回答

0

由於所有陣列都從B9開始,位於[0],然後向上計數,[31]應該是B40。

然而B40在兩個陣列應該已經被初始化的聲明;我看不到這樣的東西:

private static javax.swing.JButton B40 = new JButton(); 

事實上,這可能會使上述陣列技術可能不那麼好。

更好地與陣列立即開始。如果可能,也避免靜電。 有點像:

class X { 

    private static X x; // Maybe one instance. 

    private JButton[] buttons; 

    public X() { 
     buttons = new JButton[70]; 
     for (int i = 0; i < buttons.length; ++i) { 
      JButton button = new JButton(); 
      ... 
      buttons[i] = button; 
     } 
    } 

    public static void main(String[] args) { 
     X.x = new X(); 
    } 

然後,你必須從一開始你的陣列。

+0

問題是Jframe自動用這種方式聲明Jbuttons,有什麼方法可以覆蓋它嗎? – Yottr

+0

那會很好。也許這是一個靜態字段(全局一次)與非st靜態字段(JFrae對象)的問題?也許你首先在一個新的原型應用程序中嘗試這個概念。製作一個按鈕並使用該代碼來執行一組按鈕。 –