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

标签 java arrays foreach

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

相关文章:

java - 将图像编码为视频时出现 JCodec 错误

无法将参数1从 'char [20][20]'转换为 'char ** '?

Javascript/Lodash - 从数组中删除一个项目(具有相同的 ID)

R:可以在并行模式下在data.frame中填充值吗?

R 嵌套 foreach %dopar% 外循环和 %do% 内循环

node.js - 在下一个命令之前完成整个循环/forEach

java - LibGDX gwd 不继承所需的模块

java - 试图递归地找到数组中第二小的整数java

列表读取应用程序中的 Java NumberFormatException

php - Laravel 数组到字符串的转换