打印' n'长度的二进制数&n;' n'与for循环

时间:2016-11-10 16:16:30

标签: java string loops for-loop

我正在尝试编写一个代码,我输入一个数字' n'它告诉我' n'长度为二进制的数字' n'。数字的顺序无关紧要。

e.g。 我输入3(n = 3)

000 001 010 011 100 101 110 111  这是我到目前为止所得到的

    String b1="1",b2="0";
    String combination="0";
    String output="0"

    for (int k=1; k<=n; k++) {

            for (int z=1; z<=n; z++)
            {
                combination= b1+b2;
            }
        output = output+combination;





    }
    System.out.println(output);

但是我得到了这个输出:01010101010101010

3 个答案:

答案 0 :(得分:1)

已经有工具可以在Integer()类中打印数字的二进制表示。

因此,对于n=3,您需要输出3组二进制数字,每个输出中有3位。 toBinaryString()接受int参数并返回&#34;由二进制(基数2)&#34;中的参数表示的无符号整数值的字符串表示。您需要进行一些调整,以便在长度仅为2位的二进制表示前面获得适当的填充,即0,1,2,3,分别为00,01,10,11。

编辑:一旦我将我的代码片段复制到一个实际的Eclipse项目,我注意到我的填充逻辑是不正确的。我修好了。这段代码几乎就是你想要的。但我认为你必须做一些事情来获得你想要的输出数字。

int n = 4;
int numBits;
String paddingZero = "0";
String binary;

for(int i = 0; i <= n; i++)
{
    numBits = n / 2;
    if(numBits < 2)
    {
        numBits = 2; // Binary should never display less than 2 bits of digits for clarity.
    }

    binary = Integer.toBinaryString(i);
    if(binary.length() < numBits)
    {
        do  
        {
            binary = paddingZero + binary;
        }
        while(binary.length() < numBits);
    }

    System.out.print(binary + " "); // Appends the String representation of the binary digit to the paddingZeroes
}

输出

@ n = 3
00 01 10 11 

@ n = 4
00 01 10 11 100 

@ n = 7
000 001 010 011 100 101 110 111 

一旦n> 8 numBits逻辑需要改变一些。这将帮助您入门。

答案 1 :(得分:0)

你有点偏离轨道。以下链接有一些我认为您试图实现的不同工作示例:

https://codereview.stackexchange.com/questions/24690/print-all-binary-strings-of-length-n

答案 2 :(得分:0)

由于n位数的最大值为2^n - 1,您可以从零循环到该值并以二进制格式显示

public static void main (String[] args)
{
    int n = 4;
    String printFormat = "%"+n+"s";
    int max = (int) Math.pow(2, n);
    for (int i=0; i < max; i++) {
      String s = String.format(printFormat, Integer.toString(i, 2)).replace(' ', '0');  
      System.out.println(s);
    }
}

DEMO