繁体   English   中英

将char数组转换为int数组而在Java中没有循环?

[英]Converting char array to int array without a loop in Java?

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

假设我将获得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数组的情况下执行转换?

不是我知道的。 如果您绝对不希望遍历char数组,则可以通过几种不同的方法来执行此操作,即遍历二进制字符串的整数表示形式,并为每一步取num%10num/10 但是,在这种情况下,循环遍历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]+"");

}

这是您要完成的工作的简单解决方案。

    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,然后将零替换为零,然后再将其转换为array:

  1. 拿我

  2. 取一个二进制数A,在第j个位置上唯一的1(其他为零):A =(1 << j)

  3. 对您的数字和数字A进行相加(二进制按位乘法)。这可以通过以下方式实现:(i&A)

  4. 如果该位置有一个非零位,则在相加后将得到A。如果有零位,则将得到0。

  5. 如果结果不为零,则我在第j个位置具有非零位。 否则,那里零。

使用按位运算的解决方案也将更快。

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

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM