gpt4 book ai didi

Java 数组传递引用而不是值

转载 作者:行者123 更新时间:2023-12-02 04:01:40 25 4
gpt4 key购买 nike

所以我有一个代表二维形状的一维 boolean 数组。它的编号为 0-8,代表一个具有以下索引的 3x3 正方形:

012
345
678

我使用以下代码编写了一个函数来顺时针旋转形状:

newShape[2]=oldShape[0];
newShape[5]=oldShape[1];
newShape[8]=oldShape[2];
newShape[1]=oldShape[3];
newShape[4]=oldShape[4];
newShape[7]=oldShape[5];
newShape[0]=oldShape[6];
newShape[3]=oldShape[7];
newShape[6]=oldShape[8];

现在,当函数的输入是:

false-true-false
true--true-false
false-false-false

预期输出为:

false-true-false
false-true--true
false-false-false

但是,我得到的是:

false-true-false
true--true--true
false-true-false

这不仅是 newShape 的结果,也是oldShape 的结果,尽管我从未更改 oldShape。看起来赋值是围绕变量的引用而改变的,而不是它们的实际值。我该如何解决这个问题?

最佳答案

您似乎对 newShape 和 oldShape 使用相同的引用。当然,您应该使用不同的数组。我能够重现你的结果。只需克隆数组即可

public class Class {
public static void main(String[] args) {
boolean[] oldShape = new boolean[]{
false, true, false,
true, true, false,
false, false, false
};

// THIS DOENS TWORK
boolean[] newShape = oldShape;

//THIS WILL WORK
// boolean[] newShape = new boolean[9];

output(oldShape);

newShape[2] = oldShape[0];
newShape[5] = oldShape[1];
newShape[8] = oldShape[2];
newShape[1] = oldShape[3];
newShape[4] = oldShape[4];
newShape[7] = oldShape[5];
newShape[0] = oldShape[6];
newShape[3] = oldShape[7];
newShape[6] = oldShape[8];

output(newShape);
}

private static void output(boolean[] s) {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
System.out.print(s[i*3+j] + " ");
}
System.out.println();
}
System.out.println();
}
}

关于Java 数组传递引用而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com