простой вопрос, класс и массив

Модератор: Absurd

dykzei
Сообщения: 42
Зарегистрирован: 22 сен 2004, 14:35

есть мой класс с конструктором без параметров,
например Field.
нужно создать двумерный массив экземпляров класса
например Field field[][];

но у меня не работает такая операция

field = new Field[10][10];

как правильно создать всю матрицу?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Код: Выделить всё

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();
	}
}
dykzei
Сообщения: 42
Зарегистрирован: 22 сен 2004, 14:35

ага вижу, спасиб!
а я думал, что сразу вызывается
конструктор по умолчанию как в с++ :)
-----
зы: кажется не сработало....

пишу так:

Код: Выделить всё

    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 показывает

Код: Выделить всё

"expression" cells: Cell[][]= Cell[10][]
такое впечатление, что создались только первые 10
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

cells=new Cell();
->
cells[j]=new Cell();
dykzei
Сообщения: 42
Зарегистрирован: 22 сен 2004, 14:35

Oscar писал(а):cells=new Cell()][j]=new Cell();


ааа...... кошмар, я извиняюсь за глупость :)
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Юзай одномерный массив в 160 элементов и индексацию вида cells[(i<<4)|j]. Побыстрее будет.
2B OR NOT(2B) = FF
dykzei
Сообщения: 42
Зарегистрирован: 22 сен 2004, 14:35

хм... на скорость пока не жаловался,
а почему 160? ведь по сути у меня 10х10, т.е. 100...
и вообще, я пока не понимаю запись cells[(i<<4)|j]
можно поподробнее?
Deady
Сообщения: 193
Зарегистрирован: 17 фев 2004, 13:13
Откуда: Москва
Контактная информация:

сдвинуть i на 4 бита влево и сложить побитово с j :)
Deady
Сообщения: 193
Зарегистрирован: 17 фев 2004, 13:13
Откуда: Москва
Контактная информация:

абсурд, тогда лишняя память будет заниматься.
160 - потому что сдвиг слево на 4 равносилен умножениб на 16.
10*16 = 160
dykzei
Сообщения: 42
Зарегистрирован: 22 сен 2004, 14:35

хм..... а почему тогда не так

Код: Выделить всё

cells[i+j*10]
Ответить