Как массиву или переменной назначить другой массив по ссылке? JAVA создание таблицы

261
01 декабря 2021, 14:50

Начал изучать java и столкнулся с проблемой не получается сделать таблицу.

Нужно чтобы к каждой ячейки таблицы можно было обратится как напрямую через cells, или через массив строк rows (1 строка[1ячейка, 2 ячейка, 3 ячейка,...]), так и через массив столбцов cols.

Также сама ячейка должна содержать ссылку на массив строки, в которой она находится и массив столбца.

После создания ячейки мне получается нужно привязать эту ячейку в таблице на свое место в определенный столбец, строку и привязать к массиву строк, столбцов внутри ячейки.

При попытке привязать внутри ячейки ее к нужному столбцу, строке выходит ошибка:

"incomptible types: table.cell[] cannot be converted to byte."

В чем проблема, вроде как я туда байты и не передаю, а передаю ссылку на массив строки/столбца, или стоит вообще по другому реализовать данный класс?

class table {
    byte xlen;                  //ячеек по горизонтали
    byte ylen;                  //ячеек по вертикали
    cell[] cells;               //массив всех ячеек, место их хранения
    cell[][] rows;              //массив строк, хранятся ссылки на ячейки
    cell[][] cols;              //массив столбцов, ссылки на ячейки
    table(int xsize, int ysize) {       //конструктор таблицы
        xlen = (byte)xsize;                 //задаем размер по горизонтали для таблицы
        ylen = (byte)ysize;                 //задаем размер по вертикали для таблицы
        rows = new cell[ylen][xlen];        //создаем пустые классы
        cols = new cell[xlen][ylen];
        cells = new cell[xlen*ylen];
        cell newcell;                           //временная переменная для новой ячейки
        for (byte x=0; x<xlen; x++) {
            for (byte y=0; y<ylen; y++) {
                newcell = new cell(x, y);       //создаем новую ячейку
                cells[x*xlen+y] = newcell;
                rows[x][y] = newcell;
                cols[x][y] = newcell;
            }
        }
    }
    public class cell { //ячейка в таблице
        byte x;                 //позиция по горизонтали
        byte y;                 //позиция по вертикали
        byte[] val;             //массив значений
        cell[] row;             //строка в таблице
        cell[] col;             //столбец в таблице
        cell(byte col, byte row) {
            x = col;
            y = row;
            row = rows[row]; //ошибка
            col = cols[col]; //ошибка
        }
    }
}
Answer 1

Если имена переменных передаваемого параметра и поля класса совпадают надо указывать this, а то у вас получается что вы передаваемому параметру присваиваете значение

cell(byte col, byte row) {
    x = col;
    y = row;
    this.row = rows[row]; 
    this.col = cols[col];
}
READ ALSO
Поменять столбцы местами в матрице

Поменять столбцы местами в матрице

При работе с матрицами, а именно с двумерным массивом назовем его int[][]a для замены строк мы можем сделать так:

173
В чем причина ошибки &quot;cannot find symbol&quot; [закрыт]

В чем причина ошибки "cannot find symbol" [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

219
Почему родительский блок меняет свой размер с :hover?

Почему родительский блок меняет свой размер с :hover?

у меня присутствует ховер, который добавляет линию подчеркивания под объектом]2

149
Как сделать отображение шрифта иконок кросс-браузерно?

Как сделать отображение шрифта иконок кросс-браузерно?

Как сделать отображение шрифта иконок кросс-браузерно?

80