簡體   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