Java for循环中的System.arraycopy不是';t交换矩阵行?

Java for循环中的System.arraycopy不是';t交换矩阵行?,java,arrays,Java,Arrays,因此,这里似乎发生的是arraycopy确实将第一行复制到最后一行,但是bottomMatrix变量似乎被更新为(abc),而不是其原始(ghi) 有什么好处?它似乎是执行第一个arraycopy,然后退出循环并返回,而不是执行循环中的所有语句。您正在将代码复制到同一个数组中,因此当顶部写入底部时,它将覆盖底部,然后同样的内容写入顶部。通过ghi复制abc,然后尝试将abc复制到abc 您应该为输入和输出使用不同的数组以避免此问题 Input: abcdefghi Before decrypti

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


有什么好处?它似乎是执行第一个arraycopy,然后退出循环并返回,而不是执行循环中的所有语句。

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

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

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]]
System.out.println(“解密前:”);
System.out.println(Arrays.deepToString(output));
顶部,底部;
底部=此尺寸-1;
字符[][]复制=新字符[大小][大小];

for(top=0;top数组与Java中的所有对象一样,类似于C中的指针。
因此
char[]bottomMatrix=output[bottom];
不会复制数组,
bottomMatrix
现在只引用与
output[bottom]
相同的内存地址

但如果我没弄错的话,你甚至不需要复制,你可以重新分配:

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));

for(top=0;top正在考虑为arraycopy创建我自己的方法,看看是否有帮助。W,fast,我刚刚放弃arraycopy,使用了array.clone。但我喜欢你的解决方案,它是包容性的,并且使用了系统工具。非常感谢!@user3866172太好了,请用勾号接受答案:)小编辑,最后你应该打印副本而不是输出,已经更新了答案非常正确,我也可以使用System.arraycopy而不是使用表达式符号来避免指针的使用。谢谢你的明确解释!我不久前刚学过C,所以它绝对有意义。
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));
for(top = 0; top<bottom; top++,bottom--){
    char[] intermediate = output[top];
    output[top] = output[bottom];
    output[bottom] = intermediate;
}