在没有Java循环的情况下将char数组转换为int数组?

时间:2013-11-14 19:49:30

标签: java arrays

我需要获取矩阵内一系列数字的二进制表示,以便用另一个向量执行某些操作。

所以我想说我会得到 2 ^ 4 数字的二进制表示,就是0到15.我知道我需要 16x4 矩阵。

我有这段代码:

int [][] a = new int[15][4];

for (int i = 0; i < a.length; i++) {
    a[i] = String.format("%5s", Integer.toBinaryString(i)).replace(' ', '0').toCharArray();
}

因此,作为二进制格式化数字char[]的数组表示,我不能将其与a[i]对齐。

如果有任何方法在没有循环char数组的情况下执行强制转换?

3 个答案:

答案 0 :(得分:2)

不是我知道的。有一些不同的方法可以做到这一点,循环遍历二进制字符串的整数表示,以及每一步取num%10num/10,如果你绝对不希望循环通过char数组。但是在这种情况下,通过char数组循环似乎很简单。无论如何这里是解决方案,就像你不想要的那样我猜...

int [][] a = new int[16][4];

for (int i = 0; i < a.length; i++) {
    char[] cArr = String.format("%4s", Integer.toBinaryString(i)).replace(' ', '0').toCharArray();
    for(int j = 0; j < a[0].length; j++)
        a[i][j] = Integer.parseInt(cArr[j]+"");

}

答案 1 :(得分:1)

这是您想要完成的更简单的解决方案......

    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[0].length; j++) {
            a[i][a[0].length - 1 - j] = (i & (1 << j)) != 0 ? 1 : 0;
        }
    }

不是将整数i转换为String然后用零替换空格然后将其转换为数组,而是:

  1. 带上我。

  2. 取二进制数A,第j个位置只有1个(其他为零):A =(1 <&lt; j)

  3. 对您的号码和号码A进行连接(二进制逐位乘法)。这可以通过以下方式完成:(i&amp; A)

  4. 如果该位置有非零位,在连接后你会得到A.如果有一个零位,你将得到0.

  5. 如果结果不为零,则i在第j个位置具有非零位。否则它就没有了。

  6. 使用逐位操作的解决方案也会更快。

答案 2 :(得分:0)

我相信仍然需要一个外部循环来遍历char[][]

int[] charArray2intArray(char[][] binary) {

    int[] numbers = new int[binary.length];
    int row = 0;
    for (char[] number: binary) {

        String bin = new String(number);
        numbers[row++] = Integer.parseInt(bin, 2);
    }

    return numbers;
}