Управление массивом 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]
, таким образом получая исключение за пределами границ.