java - for循环内的System.arraycopy不是切换矩阵行吗?

标签 java arrays

System.out.println("Before decryption:");
    System.out.println(Arrays.deepToString(output));
    int top, bottom;
    bottom = this.size-1;
    for(top = 0; top<bottom; top++,bottom--){
        char[] topMatrix = output[top];
        char[] bottomMatrix = output[bottom];
        System.out.println(top+" "+bottom);
        System.arraycopy(topMatrix, 0, output[bottom], 0, size);
        System.arraycopy(bottomMatrix, 0, output[top], 0, size);
    }
    System.out.println("After Decryption: ");
    System.out.println(Arrays.deepToString(output));
}

上面是我用来切换第一行和最后一行的代码,然后是第二行和第二行到最后一行,依此类推,直到用完要在二维数组中切换的行。

这是输出:

Input: abcdefghi
Before decryption:
[[a, b, c], [d, e, f], [g, h, i]]
0 2
After Decryption: 
[[a, b, c], [d, e, f], [a, b, c]]

所以这里似乎发生的是 arraycopy 确实将第一行复制到最后一行,但不知何故,bottomMatrix 变量似乎更新为 (abc) 而不是其原始 (ghi)。

什么给了?看起来它执行了第一个 arraycopy,然后退出循环并返回,而不是执行循环中的所有语句。

最佳答案

您正在将代码复制到同一个数组,因此当您的顶部写入底部时,它会覆盖底部,然后相同的内容会写入顶部。您通过 ghi 复制 abc,然后尝试将 abc 复制到 abc。

您应该使用不同的数组进行输入和输出以避免此问题。

System.out.println("Before decryption:");
System.out.println(Arrays.deepToString(output));
int top, bottom;
bottom = this.size-1;
char[][] copy = new char[size][size];
for(top = 0; top<=bottom; top++,bottom--){
    char[] topMatrix = output[top];
    char[] bottomMatrix = output[bottom];
    System.out.println(top+" "+bottom);
    System.arraycopy(topMatrix, 0, copy[bottom], 0, size);
    System.arraycopy(bottomMatrix, 0, copy[top], 0, size);
}
System.out.println("After Decryption: ");
System.out.println(Arrays.deepToString(copy));

另请注意,我已更改为 <= 而不是 <,因为您正在写入一个新数组,因此在奇数大小的数组的情况下,如果您仅使用 <,它不会复制中心行。对于偶数大小的数组,相同的条件将起作用,因为处理完一半后顶部>底部。

关于java - for循环内的System.arraycopy不是切换矩阵行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29188287/

相关文章:

java - 在测试内运行时,WireMock 始终返回 Connection Refused

java - 如何在调用 LDAP 之前设置 Spring Security MD5 密码

ios - 如何将二维数组填充到 CollectionView 上?

javascript - 将数组转换为数组列表

java - 计时器导致 Tomcat 服务器出现问题

java - Android onTouchEvent坐标跳转

java - 应用内结算,在文本上显示本地化价格

python - 仅根据工作日(上午 8 点至晚上 10 点)和工作日在 Python 中查询数据

javascript - 使用 array.prototype.fill 而不是 array.prototype.push

python - 如何优化 (3*O(n**2)) + O(n) 算法?