【问题标题】:Print 'n' binary numbers of the length 'n' with for loops使用 for 循环打印长度为“n”的“n”个二进制数
【发布时间】:2017-03-24 18:06:00
【问题描述】:

我正在尝试编写一个代码,在其中输入一个数字“n”,它会显示长度为“n”的“n”个二进制数。数字的顺序无关紧要。

例如 我输入 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

【问题讨论】:

  • 所以你想添加换行符\r\nstackoverflow.com/questions/247059/…
  • 你的方法看起来全错了。您只是将“1”和“0”组合了很多次。有 n 位的 2^n 值(在您的情况下为 2^3 == 8)。
  • 即使在正确的示例输出中,您也不会输出长度为 n 的 n 个数字。您正在输出长度为 n 的所有 (2^n) 个二进制数。
  • 您能接受任何适用的答案吗?

标签: java string loops for-loop


【解决方案1】:

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

所以对于n=3,您需要输出 3 组二进制数字,每个输出有 3 位。 toBinaryString() 接受 int 参数并返回“二进制(基数 2)参数表示的无符号整数值的字符串表示形式”。您将需要进行一些调整以在只有 2 位长度的二进制表示之前获得适当的填充,即 0、1、2、3,它们分别是 00、01、10、11。

编辑:一旦我将我的 sn-p 复制到一个实际的 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 逻辑将需要更改一些。这将帮助您入门。

【讨论】:

    【解决方案2】:

    你有点跑题了。以下链接有几个不同的工作示例,我相信您正在努力实现:

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

    【讨论】:

      【解决方案3】:

      由于 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        相关资源
        最近更新 更多