gpt4 book ai didi

java - 在 foreach 循环中改变 boolean 数组

转载 作者:行者123 更新时间:2023-12-01 10:41:51 24 4
gpt4 key购买 nike

我有一个带有随机条目的 boolean vector 。我用 invert 方法改变它。我们可以使用传统的 for 循环来完成此操作。另一个使用 foreach。

为什么invert2()不能像invert1()那样工作?我认为 invert2() 中的 b 是 vector 中 boolean 元素的引用。因此我也尝试使用 Boolean 作为对象。b 是否类似于 vector[i].clone(),其中 i 是循环变量?

BooleanVector.java

public final class BooleanVector {

private boolean[] vector;
private Stack<boolean[]> undoStack = new Stack<>();


public BooleanVector(final int vectorSize) {
this.vector = new boolean[vectorSize];
//Generates random Array for test purposes
Random random = new Random();
for (int i = 0; i < vector.length; i++) {
vector[i] = random.nextBoolean();
}
}

public void invert1() {
for (int i = 0; i < this.vector.length; i++) {
this.vector[i] = !this.vector[i];
}
}
public void invert2() {
for (Boolean b : vector) {
b = !b;
}
}

public void printVector() {
System.out.println(Arrays.toString(this.vector));
}
}

Main.java

public class Main {
public static void main(String[] args) {
BooleanVector vector = new BooleanVector(5);
vector.printVector();
System.out.println("Invert1");
vector.invert1();
vector.printVector();
System.out.println("Invert2");
vector.invert2();
vector.printVector();
System.out.println("Invert1");
vector.invert1();
vector.printVector();

}

}

输出:

[true, true, false, true, false]
Invert1
[false, false, true, false, true]
Invert2
[false, false, true, false, true]
Invert1
[true, true, false, true, false]

最佳答案

invert1()中,您正在修改数组值,因此这些值也会被反转。正如在 invert2() 中一样,您正在更改引用 b,因此实际上并未修改列表中的值。

关于java - 在 foreach 循环中改变 boolean 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377362/

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