Java:如何输出所有可能的二进制组合(256个不同的序列)?

时间:2014-03-05 20:29:45

标签: java binary

我需要创建一个输出所有可能的二进制组合的函数(2 ^ 8 = = 256个不同的8位序列。)。我真的很难过。我必须使用嵌套循环来做,我不知道如何去做。以下是我到目前为止所尝试的内容。有人告诉我,我可以使用8个嵌套循环编写这个程序,每个循环从0到1;此外,我可以尝试使用位操作运算符。

虽然我下面的内容显然是错误的,但我尽力表明我至少试过这个。我还需要在每个结束括号后添加新行,以分隔输出。

输出应如下所示:

00000000

00000001

00000010

00000011

00000100

...

11111110

11111111

public static void outputBinary(){

int[][][][][][][][] num = new int[2][2][2][2][2][2][2][2];

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

    for (int j = 0; j < 2; j++){

    for (int k = 0; k < 2; k++){

    for (int l = 0; l < 2; l++){

    for (int m = 0; m < 2; m++){

    for (int n = 0; n < 2; n++){

    for (int o = 0; o < 2; o++){

    for (int p = 0; p < 2; p++){

        System.out.print(num[i][j][k][l][m][n][o][p]);

    } }}}}}}}

}

感谢您的关注。

8 个答案:

答案 0 :(得分:6)

不需要阵列。以下是对代码的轻微修改,将输出所有排列。

for (int i = 0; i < 2; i++){
  for (int j = 0; j < 2; j++){
    for (int k = 0; k < 2; k++){
      for (int l = 0; l < 2; l++){
        for (int m = 0; m < 2; m++){
          for (int n = 0; n < 2; n++){
            for (int o = 0; o < 2; o++){
              for (int p = 0; p < 2; p++){
                System.out.println("" + i + j + k + l + m + n + o + p);
              }
            }
          }
        }
      }
    }
  }
}

使用嵌套循环吗?因为当你简单地利用从0到255的所有数字的二进制表示覆盖每个排列的事实时,这很简单。

for (int i=0; i<256; i++) {
    System.out.println(Integer.toBinaryString(i));
}

答案 1 :(得分:2)

只需打印for变量(i...p),而无需访问这个模糊的空数组。

答案 2 :(得分:1)

好吧,如果可以使用一些内置类,可以通过以下方式执行此操作:

for (int i=0; i<256; i++){
    System.out.println(Integer.toBinaryString(i));
}

第二种方式(我相信你应该使用它,因为通过查看它你可以理解什么是引擎盖下而不是“一些魔法”,它使用bit mask):

for (int i=0;i<256;i++){
    int mask = 256;
    while (mask > 0){
        if ((mask & i) == 0){
            System.out.print("0");
        } else {
            System.out.print("1");
        }
        mask = mask >> 1;
    }
    System.out.println();
}

答案 3 :(得分:0)

这是我的版本。它使用递归通过重复除法将基数2转换为基数10:

public static void printBin()
{
    for (int i = 0; i < 256; i++) {
        int binary = decToBin(i, "");
        // pad to give length of 8
        System.out.println(String.format("%08d", binary));
    }
}

public static int decToBin(int dec, String bin)
{
    int quot = dec / 2;
    int remainder = dec % 2;
    if (quot == 0)
        return Integer.parseInt("" + remainder + bin);
    return decToBin(quot, "" + remainder + bin);
}

答案 4 :(得分:0)

这是使用位操作生成所有值的另一种方法

public static void main(String[] args) {
    int numBits = 8;

    int val = 0;
    int[] values = new int[]{0,1};
    values[0] = 0;
    values[1] = 1;

    for (int i = 1; i < numBits; i++) {
        int[] moreValues = new int[values.length * 2];
        int start = (int)Math.pow(2, i);
        for (int j = 0; j < values.length; j++) {
            moreValues[j * 2] = values[j] << 1;
            moreValues[j * 2 + 1] = values[j] << 1 | 1;
        }
        values = moreValues;
    }

    //print the values
    for (int value: values) {
        System.out.println(Integer.toBinaryString(value));
    }

}

另一种方式,使用位操作和递归

private static void generateNumbers(int number, int numBits, int currentBit) {
    if (numBits == currentBit) {
        Integer.toBinaryString(number);
        return;
    }
    currentBit++;

    generateNumbers(number << 1, numBits, currentBit);
    generateNumbers(number << 1 | 1, numBits, currentBit);

}

public static void generateNumbers(int numBits) {
    generateNumbers(0, 8, 1);
    generateNumbers(1, 8, 1);
}

public static void main(String[] args) {
    generateNumbers(8);

}

答案 5 :(得分:0)

package org.cross.topology;

import java.util.ArrayList;

public class Test {

    public static void main(String[] args) {

        //System.out.println("sushil");
        int digits=3;//Provide number of digits for which you want combinations of 0 and 1
        int noof0and1=(int) Math.pow(2,digits)/*(2^digits)*/,combinations=(int) Math.pow(2,digits),secondloopcounter=0,temp=0;
        String current_char="0";
        int startindex=0,lastindex;

        ArrayList<String> al=new ArrayList<String>(combinations);
        for(int k=0;k<combinations;k++)
        {
            al.add("");
        }

        for(int i=1;i<=digits;i++)
        {
            noof0and1=noof0and1/2;
            while(temp!=combinations)
            {
                temp=temp+noof0and1;
                secondloopcounter++;
            }
            lastindex=noof0and1;
            startindex=0;
            for(int s=0;s<secondloopcounter;s++)
            {
                for(int j=startindex;j<lastindex;j++)
                {
                    String temps=al.get(j)+current_char;
                    al.remove(j);
                    al.add(j, temps);
                }

                    if(current_char.equals("0"))
                    {
                        current_char="1";
                    }
                    else
                    {
                        current_char="0";
                    }
              startindex=lastindex;
              lastindex=lastindex+noof0and1;
            }

            temp=0;
            secondloopcounter=0;
        }

        for(int l=0;l<al.size();l++)
        {
            System.out.println(al.get(l));
        }
    }

}

答案 6 :(得分:0)

以下是使用递归作为Java中方法的解决方案

public class NumberOfBinaryPatterns {

    static int[] bitArray = new int[]{0,1};

    public static void main(String args[])
    {   
        System.out.println("Below are the patterns\n");

        int numberOfBits=4;  // It can be any value based on the requirement, In this case we can put this as 8

        drawBinaryPattern(numberOfBits,"");
    }

    private static void drawBinaryPattern(int n,String seed)
    {
        if(n==0){
            System.out.println(seed);
            return;
        }   
        for(int j=0;j<bitArray.length;j++)
        {
            String temp = seed+bitArray[j];
            drawBinaryPattern(n-1,temp);
        }
    }
}

答案 7 :(得分:-1)

在php中做,非常简单 只需转换二进制的每个组合计数,并根据需要添加0,以字节表示形式完成它。

    for($c=1;$c<=pow(2,8);$c++)
    {
      $bin_str=base_convert($c,10,2);   //converting combination number into binary string
      $len_str=strlen($bin_str);        // Length of string obtained
      for($i=1;$i<=8-$len_str;$i++)
        $bin_str="0".$bin_str;      // adding as many 0 as required to complete in byte format

      echo "<br>".$bin_str;         //Displaying binary values in byte structure

  }