Чтение строк в массив по столбцам

#java #arrays #multidimensional-array

#java #массивы #многомерный массив

Вопрос:

Я пытаюсь прочитать строковые объекты в 2d-массив из char массива, используя порядок столбцов:

Это то, что я пробовал:

 int x = 0;
for (int column = 0; column < matrix[0].length; column  ) {//cols
     for (int row = 0; row < matrix.length; row  , x  ) {//rows
         if(matrix[row][column] == null) {
             if (x < ciphertextCharacters.length) {
                 matrix[row][column] = Character.toString(inputChars[x]);
             }
         }
    }
}
  

учитывая входной массив (inputChars = [‘t’, ‘t’, ‘g’, ‘e’, ‘i’, ‘s’, ‘n’]), результирующий 2D-массив должен быть:

  --- ---- ---- 
| t | e  |  s |
 --- ---- ---- 
| t | i  |  n |
 --- ---- ---- 
| g | *  |  * |
 --- ---- ---- 
  

Обратите внимание, что перед запуском этого кода строки «*» уже находятся в массиве — и именно поэтому я добавляю новые значения только тогда, когда индекс равен нулю.

В настоящее время результирующий 2D-массив, который я получаю, является:

  --- ---- ---- 
| t | e  |  n |
 --- ---- ---- 
| t | i  |null|
 --- ---- ---- 
| g | *  |  * |
 --- ---- ---- 
  

Это не то, что мне нужно.

Комментарии:

1. вы увеличиваете свой x слишком часто. переход x от объявления цикла к концу if блока

Ответ №1:

Проблема в том, что вы помещаете inputChars[x] в matrix[row][column] на основе результата условия, но x оно увеличивается безоговорочно:

 for (int row = 0; row < matrix.length; row  , x  ) {
//                                            ^^^
  

Замена безусловного приращения в цикле на условное приращение при назначении должна решить эту проблему:

 for (int row = 0; row < matrix.length; row  ) {
    ...
    matrix[row][column] = Character.toString(inputChars[x  ]);
    ...
}