2012-04-02 2 views
0

Здесь кое-что отсутствует. с этим кодом я получаю java.lang.NullPointerException:java.lang.NullPointerException при заполнении массива объектов

public static void main(String[] args) { 

    Board board = new Board(); 
    board.Initialise(); 

} 


public class Board { 

private Obj[][] tableau; 

public void Board() { 

    tableau = new Obj[8][8];  
} 

public void Fill_Board() { 

    tableau[0][0]= new Obj('B'); 
    } 
} 

Но с этим другим кодом я не получаю сообщение об ошибке. Что я делаю неправильно, и как правильно инициализировать этот массив объектов?

public class Board { 

private Obj[][] tableau = new Obj[8][8]; 

public void Board() { 

} 

public void Fill_Board() { 

    tableau[0][0]= new Obj('B'); 
    } 
} 
+1

Я думаю, вам нужно предоставить нам больше контекста, потому что у вас есть вкладка класса, но вы не используете ее в main() –

+0

@ TerraNova993 Почему вы неформатируете редактирование людей, сделанных для того, чтобы сделать ваш код доступным для чтения? – jzworkman

ответ

2

Board() заканчивает тем, что функция член, а не конструктор, и поэтому никогда не вызывается. Проблема заключается в void ключевое слово, которое должно быть удалено:

public Board() { /* removed the `void' */ 
    tableau = new Obj[8][8];  
} 
+1

Нет класса 'Board'. – Makoto

+0

большое спасибо! – TerraNova993

+0

@Makoto: Очевидно, что ('Board board = new Board()'). То, что нам представлено, - это фрагмент, и я подозреваю, что 'Board()', кажется, появляется в 'Tab', а не в' Board', - это просто артефакт этого, являющегося фрагментом. – NPE

0

я не получаю ошибку, когда я запускаю этот код (изменение Obj к фактическому классу), возможно, вы можете обеспечить более конкретный пример с основным методом что вы пытаетесь сделать?

Если вы ищете конструктор, то это должно быть то же имя, что и ваш класс, т. Е. Tab и не иметь типа возврата.

Так что вам нужно будет добавить:

public Tab() { 
    // initialization code here 
} 

Ты конструктор будет работать каждый раз, когда вы создаете новый экземпляр этого класса. Вы хотите использовать его для инициализации всех ваших переменных.

Tab t = new Tab(); // Constructor runs 

Edit:

Вы главный метод использует класс Board но вы дали нам класс под названием Tab. Я могу предположить, что вам действительно нужен классный совет, поэтому вы должны изменить все Tab на Board в приведенном выше примере, если это то, что вы ищете.

+0

thnaks, проблема заключалась в том, что у конструктора была пустота, поэтому я удалил void, чтобы создать правильный конструктор, и это сработало. – TerraNova993

Смежные вопросы