我有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);
}
}
我应该在这里更改什么?
答案 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时,它将创建新对象。