Java 创建大小为n的布尔数组的所有可能方式?

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)

我需要能够创建一个组合的布尔数组,并通过一个程序运行它,看看它是否有效。如果没有,那么我处理它并转到下一个组合。我的问题是我不知道如何创建这个数组,因为n可以等于1-1000之间的任意值。所以我计划使用Integer.toBinaryString,但这不起作用,因为当它超过32时,它太大了。 任何帮助都将是巨大的


谢谢

我在另一个网站上找到了你问题的答案,并为你修改了它:

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
when
n>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)
    }