获取1和0的所有序列

时间:2017-09-15 14:51:21

标签: java loops for-loop

我试图在三输入系统中达到以下1和0序列:

000
001
010
...
...

我目前的代码没有成功: -

for (int i = 0; i < possibleCombinations; i++) {

        for (j = 0 ; j < 3; j++) {
            if (j < 2 ){
                k = j;
            }
            System.out.print(k + " ");
        }

        System.out.println();
    }

我如何达到上述结果?

3 个答案:

答案 0 :(得分:1)

一行:

 for (int i = 0; i < 8; i++) {
   System.out.println(((i>>2)%2)+""+((i>>1)%2)+""+(i%2));
 }

当然,您可以将此概括为n通道。

    int numChannels=3;
    for (int i = 0; i < 2<<numChannels; i++) {
        for(int j=numChannels-1; j>=0;j--){
            System.out.print((i>>j)%2);
        }
        System.out.println();
    }

考虑使用零和1的周期性(第一个通道有模式00001111 ..,第二个0011 ..,第三个01 ..)。

答案 1 :(得分:0)

您可以使用bitmasks

 void generateCombinations(int n) {
    for(int i = 0; i < (1 << n); i++) {
         for(int j = n - 1; j >= 0; j--) {
            if((i & (1 << j)) != 0) {
                System.out.print(1);
            } else {
                System.out.print(0);
            }
        }
        System.out.println();
    }
}

因此,对于n = 3,您将拥有2 ^ n = 8个组合。这就是为什么第一个为1 << n,这与2 ^ n相同。 对于每个数字,您检查它是否位并打印它们。

(i & (1 << j)) != 0 - 这会检查位置1上的位是0还是j

答案 2 :(得分:0)

我们遇到以下情况:

n=2; - &gt; 00,01,10,11

n=3; - &GT; 000,001,010,011,100,101,110,111.

...

算法只是枚举二进制中2^n - 1之前的所有数字。例如,n=2

二进制文件中的

000

二进制文件中的

101

二进制文件中的

210

二进制文件中的

311

要将一个整数数字转换为二进制字符串,您应该使用Integer.toBinaryString方法。

代码:

 static String print_binary(int n)
 {
    String binaryString=Integer.toBinaryString(n);
    String additional=new String(new char[n-binaryString.length()]).replace("\0", "0");
    if(binaryString.length() < n)
            binaryString+=additional;
    return binaryString;
 }
 static void Main(String args[]){
     int possibleCombinations = 1<<LENGTH, i; 
     for(i = 0; i< possibleCombinations; i++)
         System.out.println(print_binary(i));
 }