2013-11-14 4 views
0

Мне нужно получить двоичное представление для диапазона чисел внутри матрицы, чтобы выполнить некоторые операции с другим вектором.Преобразование массива char в массив int без цикла в 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[], я не могу просто Asign его a[i].

Если какой-либо способ выполнить литье без прокрутки массива символов?

+2

Вы имеете в виду '16 x 4'? =) почему 5? –

ответ

2

Не об этом я знаю. Есть несколько способов сделать это, либо перебирать целочисленное представление двоичной строки, и принимать num%10 и num/10 для каждого шага, если вам абсолютно не нужен цикл через массив символов. Однако в этом случае кажется довольно прямой, чтобы просто пройти через массив символов. В любом случае здесь это решение, так, как вы не хотите, я думаю ...

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

Это более простое решение, что вы пытаетесь достичь ...

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

Вместо преобразования целое число в строку ввода, а затем заменить пробелы нулями, а затем преобразование его в массив, вы:

  1. Take я.

  2. Возьмите двоичных чисел А с только 1 на j-й позиции (инобытия нулями): А = (1 < < к)

  3. Выполните конъюнкции (двоичный побитовое умножение) Вашего номера и число A. Это выполняется: (i & A)

  4. Если в этой позиции был ненулевой бит, после соединения вы получите A. Если был нулевой бит, вы получите 0.

  5. Если результат не равен zer o, i имеет ненулевой бит в j-й позиции. В противном случае он имеет нуль.

Решение с использованием побитовых операций будет выполняться быстрее.

+0

Отлично работает! Я только удивляюсь, есть ли шанс, что я получу цифры в правильном порядке *? Быть 'a.length' 16 Я получаю следующий вывод при печати матрицы: \t 0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15 – diegoaguilar

+0

И да, он работает намного быстрее! – diegoaguilar

+0

, пожалуйста, покажите полный код того, как вы печатаете эту матрицу –

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; 
} 
Смежные вопросы