[英]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%10
和num/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:
拿我
取一個二進制數A,在第j個位置上唯一的1(其他為零):A =(1 << j)
對您的數字和數字A進行相加(二進制按位乘法)。這可以通過以下方式實現:(i&A)
如果該位置有一個非零位,則在相加后將得到A。如果有零位,則將得到0。
如果結果不為零,則我在第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.