我正在尝试编写一个代码,我输入一个数字' 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
答案 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);
}
}