Страница 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 показывает

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

"expression" cells: Cell[][]= Cell[10][]
такое впечатление, что создались только первые 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
хм..... а почему тогда не так

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

cells[i+j*10]