我试图在三输入系统中达到以下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();
}
我如何达到上述结果?
答案 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
:
0
为00
1
为01
2
为10
3
为11
要将一个整数数字转换为二进制字符串,您应该使用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));
}