【问题标题】:Manipulating an int[][] Array with bit operators JAVA使用位运算符 JAVA 操作 int[][] 数组
【发布时间】:2015-10-30 12:49:19
【问题描述】:

我需要取一个 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

此外,我需要采用相同的数组并将每个 [row][col] 的低 2 位与高 2 位交换,我也很迷失这部分。我知道我将再次需要一个嵌套的 for 循环,并且它与上述过程非常相似,如果不是镜像的话,但这真的让我很难过。

我确实先搜索了这个,找到了a similar question,但我也不是很理解那个代码,它仍然没有回答我的第一个问题。

编辑:运行代码会引发 java.lang.ArrayIndexOutOfBoundsException

edit2:更新代码以反映更改

【问题讨论】:

  • 你需要说明你得到了什么错误!
  • 如何计算高度和宽度?如果第二个维度始终没有相同的大小,那么您可能会得到 IndexOutOfBoundException。
  • 哎呀...我的意思是我已经添加了它
  • @KevinEsche 它们在我的代码中已在上面定义,但它是一个方形数组。数组中的每个元素对应于图片中的一个位置 [row][col],比如 256x512 或其他东西。

标签: java arrays multidimensional-array indexoutofboundsexception bit-shift


【解决方案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],从而得到了越界异常。

【讨论】:

  • 那不起作用:(如果我通过断点似乎会出错:someArray[row][col] = wholeNum;
  • @lexIcon 还是 IndexOutOfBounds?请发布堆栈跟踪。
  • @lexIcon 另外请更新您的代码以反映您刚刚所做的任何更改。
猜你喜欢
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多