更改后无法重置列表

时间:2018-08-22 16:48:05

标签: java

我有10个元素列表,其中1个为真,9个为假。

我想将最后一个元素更改为true,并将rest设置为false。 我不知道为什么我的代码无法正常工作,在调试模式下,我都将其设置为false,但是在控制台中,我看到的是2x true。

我的代码可能是错误的:

public class Test {

    private static boolean a = true;
    private static boolean b;
    private static boolean c;
    private static boolean d;
    private static boolean e;

    private static boolean a2;
    private static boolean b2;
    private static boolean c2;
    private static boolean d2;
    private static boolean e2;

    private static List<Boolean> listOfBooleans = new LinkedList<>();

    public static void main(String[] args) {

        listOfBooleans.add(a);
        listOfBooleans.add(b);
        listOfBooleans.add(c);
        listOfBooleans.add(d);
        listOfBooleans.add(e);
        listOfBooleans.add(a2);
        listOfBooleans.add(b2);
        listOfBooleans.add(c2);
        listOfBooleans.add(d2);
        listOfBooleans.add(e2);

        for (Boolean listOfBoolean : listOfBooleans) {
            System.out.println(listOfBoolean);
        }

        System.out.println("\n");

        setOnlyOne(9);

        for (Boolean listOfBoolean : listOfBooleans) {
            System.out.println(listOfBoolean);
        }

    }

    private static void setOnlyOne(int index){
        for (Boolean listOfBoolean : listOfBooleans) {
            listOfBoolean = false;
        }
        listOfBooleans.set(index, true);
    }

}

我应该在这里更改什么?

3 个答案:

答案 0 :(得分:0)

问题通过for-each方法中的setOnlyOne循环进行。它正在遍历ArrayList的所有元素,但没有更新列表的值。相反,它正在更新我们使用for-each构造获取的本地值并将其更新为false。这样做对ArrayList对象没有影响。

因此,代替使用for-each循环,您可以正常使用for循环并使用ArrayList的set方法来更新单个元素。尝试下面的代码

private static void setOnlyOne(int index) {
    for (int i = 0; i < listOfBooleans.size(); i++) {
        listOfBooleans.set(i, false);
    }
    listOfBooleans.set(index, true);
}

答案 1 :(得分:0)

在此代码中

private static void setOnlyOne(int index){
        for (Boolean listOfBoolean : listOfBooleans) {
            listOfBoolean = false;
        }
        listOfBooleans.set(index, true);
    }

您未将false的值设置为listOfBooleans列表的元素。 您只能将本地值设置为false。 尝试更改您的代码:

 private static void setOnlyOne(int index){
        for (int i = 0; i < listOfBooleans.size(); i++) {
            listOfBooleans.set(i, false);
        }
        listOfBooleans.set(index, true);
    }

顺便说一句。从列表listOfBoolean调用单个值会产生误导,因为在您的情况下它不是列表。这只是一个元素。 将其命名为singleBoolean或类似的名称。

答案 2 :(得分:0)

布尔值是不可变的对象,例如字符串。因此,将其值更改为false不会更改列表中的值。当您将其更改为false时,它将创建新对象。