Управление массивом int[][] с помощью битовых операторов JAVA

Мне нужно взять массив int[][] и сдвинуть биты 0-6 на одну позицию влево, сохраняя при этом бит 7 и устанавливая бит 0 в ранее сохраненное значение бита 7; для каждого местоположения [row][col] в массиве. У меня есть код, который, как мне кажется, находится на грани этого, но я что-то упустил и не могу понять, что:

    int[][] temp = someArray;
    for(int row = 0; row < someArray.length; ++row)
        for(int col = 0; col < someArray [row].length; ++col)
        {
            int num = someArray[row][j];
            int numAtSeven = num & (1 << 7);

            num = num << 1; //shift
            numAtSeven = numAtSeven >> 7; //move to end
            num = num | numAtSeven; //put back in
            System.out.println(row + " = " + col);
            System.out.println(num);
            temp[row][j] = num;
        }
    System.out.println("out");
    someArray = temp;

все еще ArrayOutOfIndex, выдает следующий вывод:

    0 = 0
    279
    0 = 1
    324
    0 = 1
    .
    .
    .
    326 = 1
    359
    326 = 2
    301
    326 = 3
    .
    .
    .

    329
    327 = 499
    357
    out
    java.lang.ArrayIndexOutOfBoundsException: 285

Кроме того, мне нужно взять тот же массив и обменять 2 младших бита с 2 старшими битами для каждого [row][col], и я тоже довольно потерян в этой части. Я знаю, что мне снова понадобится вложенный цикл for, и он будет очень похож на описанный выше процесс, если не будет отражать его, но это действительно ставит меня в тупик.

Сначала я искал это и нашел похожий вопрос, но я тоже не понимаю этот код, и он все еще не отвечает на мой первый вопрос.

редактирование: выполнение кода вызывает исключение java.lang.ArrayIndexOutOfBoundsException

edit2: обновлен код для отражения изменений

1 ответ

Наверное потому что height а также width неверны, и поэтому вы получите IndexOutOfBoundsException,

Пытаться:

for(int row = 0; row < someArray.length; ++row)
    for(int col = 0; col < someArray[row].length; ++col)

Для матрицы m:

[[0, 0, 0, 0, ... , 0],
 [0, 0, 0, 0, ... , 0],
         ...
 [0, 0, 0, 0, ... , 0]]

m[1][2] будет помечен M:

m[x][y] --------y----------
        0  1  2  3  ...   m
|  0  [[0, 0, 0, 0, ... , 0],
x  1   [0, 0, M, 0, ... , 0],
|  2           ...
|  n   [0, 0, 0, 0, ... , 0]]

Таким образом, вы могли случайно использовать someArray[y][x] вместо someArray[x][y], таким образом получая исключение за пределами границ.

Другие вопросы по тегам