Страница 1 из 2
простой вопрос, класс и массив
Добавлено: 18 апр 2005, 21:56
dykzei
есть мой класс с конструктором без параметров,
например Field.
нужно создать двумерный массив экземпляров класса
например Field field[][];
но у меня не работает такая операция
field = new Field[10][10];
как правильно создать всю матрицу?
Добавлено: 18 апр 2005, 22:51
Oscar
Код: Выделить всё
public class Test {
public static void main(String args[]) {
Field[][] matrix = new Field[10][10];
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
matrix[i][j] = new Field();
}
}
Добавлено: 18 апр 2005, 22:57
dykzei
ага вижу, спасиб!
а я думал, что сразу вызывается
конструктор по умолчанию как в с++ :)
-----
зы: кажется не сработало....
пишу так:
Код: Выделить всё
Cell cells[][];
cells = new Cell[10][10];
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
cells[i][i]=new Cell();
for(int i=0;i<10;i++)
for(int j=0;j<10;j++){
cells[i][j].x=i;
cells[i][j].y=j;
}
при обращении к
x и
y полям выдает exception,
а watch показывает
такое впечатление, что создались только первые 10
Добавлено: 18 апр 2005, 23:15
Oscar
cells=new Cell();
->
cells[j]=new Cell();
Добавлено: 18 апр 2005, 23:20
dykzei
Oscar писал(а):cells=new Cell()][j]=new Cell();
ааа...... кошмар, я извиняюсь за глупость :)
Добавлено: 19 апр 2005, 10:55
Absurd
Юзай одномерный массив в 160 элементов и индексацию вида cells[(i<<4)|j]. Побыстрее будет.
Добавлено: 19 апр 2005, 11:05
dykzei
хм... на скорость пока не жаловался,
а почему 160? ведь по сути у меня 10х10, т.е. 100...
и вообще, я пока не понимаю запись cells[(i<<4)|j]
можно поподробнее?
Добавлено: 19 апр 2005, 11:07
Deady
сдвинуть i на 4 бита влево и сложить побитово с j

Добавлено: 19 апр 2005, 11:09
Deady
абсурд, тогда лишняя память будет заниматься.
160 - потому что сдвиг слево на 4 равносилен умножениб на 16.
10*16 = 160
Добавлено: 19 апр 2005, 11:28
dykzei
хм..... а почему тогда не так