在矩阵中创建二进制数的方法

时间:2017-01-08 23:20:40

标签: java matrix binary numbers

我正在Java中创建一个给定整数x的方法,创建一个2 ^ x行和x列的矩阵,其中每个数组都代表一个二进制数。

Ex:x = 4

matrix =

  • 0 0 0 0
  • 0 0 0 1
  • 0 0 1 0
  • 0 0 1 1
  • 0 1 0 0

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的矩阵,但是我看不到它。

3 个答案:

答案 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]。它不复制行,它使行指向与前一行相同的数组。从那时起,你只是再次编辑同一行。