我正在Java中创建一个给定整数x的方法,创建一个2 ^ x行和x列的矩阵,其中每个数组都代表一个二进制数。
Ex:x = 4
matrix =
等
public static int[][] routes(int b) {
int[][] r = new int[(int)Math.pow(2,b)][b];
int i = 1;
while (i < r.length) {
r[i] = r[i-1];
int h = 1;
while (r[i][b-h] == 1) {
h += 1;
}
r[i][b-h] = 1;
h -= 1;
while (h >= 1) {
r[i][b-h] = 0;
h -= 1;
}
i += 1;
}
return r;
}
这就是方法。它确实返回一个满1的矩阵,但是我看不到它。
答案 0 :(得分:2)
试试这段代码:
public static int[][] routes(int b) {
int[][] r = new int[(int)Math.pow(2,b)][b];
for(int i = 0 ; i < r.length; ++i){
for( int j = 0 ; j < r[0].length; ++j){
r[i][j]=0;
}
}
for(int i = 1; i < r.length ; ++i){
int j = b-1;
while( r[i-1][j] == 1 ){
r[i][j] = 0;
j--;
}
r[i][j] = 1;
for( j-- ; j >= 0 ; j--){
r[i][j] = r[i-1][j];
}
}
return r;
}
答案 1 :(得分:0)
您可以使用Java的内置功能,通过使用x & (1<pos)
技巧扫描位来将整数表示为二进制数:
while (i < r.length) {
for (int pos = 0 ; pos != b ; pos++) {
r[i][pos] = (i & (1 << pos)) != 0 ? 1 : 0;
}
}
这就是你所需要的一切:i
的二进制表示,行的索引,对应于你想要产生的二进制数的位。
答案 2 :(得分:0)
你错误的是r[i] = r[i-1]
。它不复制行,它使行指向与前一行相同的数组。从那时起,你只是再次编辑同一行。