Java:将TRUE/FALSE的所有可能组合添加到列表中
Java: Add all possible combinations of TRUE/FALSE to a list
我看过其他关于这个问题的帖子,但它们并不完全像这个问题。
我有这个代码:
public static List<Boosters.Builder> GetBoosters() {
List<Boosters.Builder> boosters = new ArrayList<Boosters.Builder>();
Boosters.Builder booster = new Boosters.Builder();
booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.TRUE);
boosters.add(booster);
booster.setLarge(Bool.FALSE).setMedium(Bool.TRUE).setSmall(Bool.FALSE);
boosters.add(booster);
booster.setLarge(Bool.TRUE).setMedium(Bool.FALSE).setSmall(Bool.TRUE);
boosters.add(booster);
booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.FALSE);
boosters.add(booster);
// (etc, etc, etc)
return boosters;
}
这是我在 Java 中所做的一些生成类型的一部分。但是 Bool.TRUE/Bool.FALSE 的工作方式有点像普通的 java 布尔值,所以你可以指望它。
我正在尝试制作一个循环,它将为我提供 TRUE/FALSE 的所有可能组合:
booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.TRUE);
我不知道如何在循环中很好地执行此操作。有人可以帮我吗?
使用 Bool#values()
迭代枚举的可能值:
for (Bool large : Bool.values())
for (Bool medium : Bool.values())
for (Bool small : Bool.values())
boosters.add(new Boosters.Builder().setLarge(large).setMedium(medium).setSmall(small));
一种方法是 运行 从 0
到 2^n
(不包括)的整数 - 其中 n
是您需要分配的变量数。
然后,可以用(x >> k) % 2
得到变量号k的值。
这仅适用于少于 64 个值(使用 long
变量)。
for (int x =0; x < 1<<k; x++) {
int val1 = (x >> 0) %2;
int val2 = (x >> 1) %2;
int val3 = (x >> 2) %2;
...
System.out.println("" + val1 + "," + val2 + "," + val3);
}
请注意,通过将 val1,val2,...
切换为数组,可以轻松地将此方法修改为任意数量的变量(适合 long
)。
我看过其他关于这个问题的帖子,但它们并不完全像这个问题。
我有这个代码:
public static List<Boosters.Builder> GetBoosters() {
List<Boosters.Builder> boosters = new ArrayList<Boosters.Builder>();
Boosters.Builder booster = new Boosters.Builder();
booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.TRUE);
boosters.add(booster);
booster.setLarge(Bool.FALSE).setMedium(Bool.TRUE).setSmall(Bool.FALSE);
boosters.add(booster);
booster.setLarge(Bool.TRUE).setMedium(Bool.FALSE).setSmall(Bool.TRUE);
boosters.add(booster);
booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.FALSE);
boosters.add(booster);
// (etc, etc, etc)
return boosters;
}
这是我在 Java 中所做的一些生成类型的一部分。但是 Bool.TRUE/Bool.FALSE 的工作方式有点像普通的 java 布尔值,所以你可以指望它。
我正在尝试制作一个循环,它将为我提供 TRUE/FALSE 的所有可能组合:
booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.TRUE);
我不知道如何在循环中很好地执行此操作。有人可以帮我吗?
使用 Bool#values()
迭代枚举的可能值:
for (Bool large : Bool.values())
for (Bool medium : Bool.values())
for (Bool small : Bool.values())
boosters.add(new Boosters.Builder().setLarge(large).setMedium(medium).setSmall(small));
一种方法是 运行 从 0
到 2^n
(不包括)的整数 - 其中 n
是您需要分配的变量数。
然后,可以用(x >> k) % 2
得到变量号k的值。
这仅适用于少于 64 个值(使用 long
变量)。
for (int x =0; x < 1<<k; x++) {
int val1 = (x >> 0) %2;
int val2 = (x >> 1) %2;
int val3 = (x >> 2) %2;
...
System.out.println("" + val1 + "," + val2 + "," + val3);
}
请注意,通过将 val1,val2,...
切换为数组,可以轻松地将此方法修改为任意数量的变量(适合 long
)。