我有一个带有随机条目的 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/