Java 创建大小为n的布尔数组的所有可能方式?
我需要能够创建一个组合的布尔数组,并通过一个程序运行它,看看它是否有效。如果没有,那么我处理它并转到下一个组合。我的问题是我不知道如何创建这个数组,因为n可以等于1-1000之间的任意值。所以我计划使用Integer.toBinaryString,但这不起作用,因为当它超过32时,它太大了。 任何帮助都将是巨大的Java 创建大小为n的布尔数组的所有可能方式?,java,arrays,boolean,combinations,Java,Arrays,Boolean,Combinations,我需要能够创建一个组合的布尔数组,并通过一个程序运行它,看看它是否有效。如果没有,那么我处理它并转到下一个组合。我的问题是我不知道如何创建这个数组,因为n可以等于1-1000之间的任意值。所以我计划使用Integer.toBinaryString,但这不起作用,因为当它超过32时,它太大了。 任何帮助都将是巨大的 谢谢 我在另一个网站上找到了你问题的答案,并为你修改了它: public class Foo { public static void main(String[] args)
谢谢 我在另一个网站上找到了你问题的答案,并为你修改了它:
public class Foo {
public static void main(String[] args) {
final int n = 3;
for (int i = 0; i < Math.pow(2, n); i++) {
String bin = Integer.toBinaryString(i);
while (bin.length() < n)
bin = "0" + bin;
char[] chars = bin.toCharArray();
boolean[] boolArray = new boolean[n];
for (int j = 0; j < chars.length; j++) {
boolArray[j] = chars[j] == '0' ? true : false;
}
System.out.println(Arrays.toString(boolArray));
}
}
}
已测试,这将适用于高值的n
,如10000等。接受答案中指出
经过测试,这将适用于n的高值,如10000等
但这是不正确的
public static void main(String[] args) {
final int n = 3;
for (int i = 0; i < Math.pow(2, n); i++) {
String bin = Integer.toBinaryString(i);
while (bin.length() < n)
bin = "0" + bin;
char[] chars = bin.toCharArray();
boolean[] boolArray = new boolean[n];
for (int j = 0; j < chars.length; j++) {
boolArray[j] = chars[j] == '0' ? true : false;
}
System.out.println(Arrays.toString(boolArray));
}
}
上面的代码将无限期打印i超过整数。最大值
但是,可以使用
biginger
或类似的循环数据结构轻松纠正这一问题。下面的代码适用于n我知道有一个Java标记。我只想将我从Java转换的swift代码添加到答案中
let SIZE = 4
let max = (pow(2, SIZE) as NSDecimalNumber).intValue;
for i in 0..<max {
var bin = String(i, radix: 2)
while (bin.count < SIZE){
bin = "0" + bin
}
var boolArray = [Bool]();
var count = 0
for ch in bin {
boolArray.append(ch == "0")
count = count + 1
}
print(boolArray)
}
let SIZE=4
设max=(功率(2,大小)为NSDecimalNumber.intValue;
对于0中的i,n是什么?数组的长度?对不起,我的错,n是布尔数组中需要的点数。您考虑过使用吗?例如,ArrayList允许您添加无限数量的布尔值。它就像一个自扩展数组。我的主要问题是,我不知道如何创建所有可能的组合,例如对于一个尺寸为3的数组,第一个组合是000,然后下一个组合是001,下一个是010或类似的东西。所以。。。n是布尔数组中的位数,要创建一个包含所有布尔数直到n位数的数组吗?是这样吗?你考虑过使用吗?我看到了,但它不会导致问题,因为我必须在阵列中找到1000个不同的点,所以我需要有1000字节的东西。是的,我的错。当我尝试为n
输入更高的数字时,实际上我从内存错误中得到了。在这种情况下,您只需创建大小为[n]的2^n个数组。我已经更新了我的答案。for(inti=0;I
whenn>31
将永远循环,因为整数I
将溢出为assertTrue(integer.MAX\u VALUE+1==integer.MIN\u VALUE)
请查看我的答案,了解已纠正的实现我非常怀疑你用10000测试过它,不仅这个解决方案将永远循环,而且2^10000是一个如此大的数字,我不确定是否有任何计算机计算过这个数字……您可以直接生成它,而不是使用字符串:如果有人对一点额外的性能感兴趣(如我所需),我在循环中使用它来减少大约40%的时间boolean[]boolArray=新布尔值[n];长面罩=1;对于(intj=0;j0;mask
public static void main2(String[] args){
int n = 32;
for (int i = 0; i < Math.pow(2, n); i++){
if (i == Integer.MIN_VALUE) {
// i overflows
System.out.println("i exceeded Integer.MAX_VALUE");
}
}
}
public static void main(String[] args) {
final int n = 32;
BigInteger bi = BigInteger.ZERO;
BigDecimal rows = new BigDecimal(Math.pow(2, n));
while (bi.compareTo(rows.toBigInteger()) < 0) {
String bin = bi.toString(2);//Integer.toBinaryString(i);
while (bin.length() < n)
bin = "0" + bin;
char[] chars = bin.toCharArray();
boolean[] boolArray = new boolean[n];
for (int j = 0; j < chars.length; j++) {
boolArray[j] = chars[j] == '0' ? true : false;
}
System.out.println(Arrays.toString(boolArray));
bi = bi.add(BigInteger.ONE);
}
}
let SIZE = 4
let max = (pow(2, SIZE) as NSDecimalNumber).intValue;
for i in 0..<max {
var bin = String(i, radix: 2)
while (bin.count < SIZE){
bin = "0" + bin
}
var boolArray = [Bool]();
var count = 0
for ch in bin {
boolArray.append(ch == "0")
count = count + 1
}
print(boolArray)
}