2015-06-02 3 views
0

Я делал игру ludo (для процессора и человека) с помощью java swing, используя Jframe. Есть в общей сложности 70 кнопок перемещения, я пытался создать три массива, два для размещения маркерных позиций двух игроков, а третий - для удерживания всех кнопок, но, похоже, проблема.Weird array glitch

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}; 

Теперь проблема это утверждение возвращает ложное

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

Все было бы хорошо. Может быть, это вопрос статических полей (один раз в глобальном масштабе) и нестационарных статических полей (объекта JFrae)? Возможно, вы впервые попробуете эту концепцию в новом приложении протипа. Сделайте одну кнопку и используйте этот код для создания набора кнопок. –