2015-10-05 3 views
-2

Независимо от того, какой фрагмент кода я пытаюсь найти в Интернете (в основном из Stack Exchange/Overflow), я не могу понять, как преобразовать (или «назначить») элементов одномерного массива в двумерный массив.Преобразование массива Java 1D в 2D-массив

String str = in.next(); // Read the incoming text file and store it as a string 
char[] oneDcharArray = str.toCharArray(); // Convert the string into a 1D array 
maze = new char[numberOfRows][numberOfColumns]; // Assign row/column size to 2D array 
int count = 0; 

for (row = 0; row < numberOfRows; row++) 
{ 
    for (column = 0; column < numberOfColumns; column++) 
    { 
     // Convert 1D array into 2D array 
     maze[row][column] = oneDcharArray[count]; // Error: ArrayIndexOutOfBoundsException 
     count++; 
    } 
} 

Ответ на Jags ниже работает хорошо, но это не идеально. Он печатает:

Row 0: ++++++++++ 
Row 1: S+++++++++ 
Row 2: ++++++++++ 
Row 3: +++++ 0000 0000 0000 0000 0000 
Row 0: ++++++++++ 
Row 1: OOOOOOOOOO 
...... 
+0

Как вы можете быть уверены, что у вас есть достаточное количество строк, чтобы держать записи массива 1D? – dave

+0

Подсказка: используйте отладчик и следуйте «count» var и посмотрите, насколько он высок ... –

+0

Каково значение 'numberOfRows',' numberOfColumns' и длина строки ввода? – Rehman

ответ

0

// строки * цв должны равняться одной двумерный массив

public static char[][] conversion(char[] array, int rows, int cols) 
    { 
     if (array.length != (rows*cols)) 
     throw new IllegalArgumentException("Invalid array length"); 
     char[][] array2d = new char[rows][cols]; 
     for (int i = 0; i < rows; i++) 
       System.arraycopy(array, (i*cols), array2d[i], 0, cols); 

       return array2d; 
    } 
+0

Спасибо. Я попробую. –

+0

Я бы предпочел не использовать другой метод. Это выглядит немного сложнее для моего уровня программирования. Сожалею. –

0

Ниже пример кода должен работать. Вам нужно выполнить цикл через oneDcharArray, а не строки/столбцы. Но обратите внимание, что все зависит от того, каково ваше требование создать лабиринт. То есть, как именно вы хотите выделить доступные символы в массив N x M.

public class OneToTwo { 

    public static void main(String[] args) { 

     String str = "This is my test string with some words in it."; 
     char[] oneDcharArray = str.toCharArray(); // Convert the string into a 1D array 

     int numberOfColumns = 10; 
     int numberOfRows = (int)Math.ceil(oneDcharArray.length/numberOfColumns) + 1; // its not modulo 

     char[][] maze = new char[numberOfRows][numberOfColumns]; // Assign row/column size to 2D array 
     int count = 0; 

     int row =0 ,column = 0; 

     for (char c:oneDcharArray) { 

      if(column >= numberOfColumns) { 
       row++; 
       column = 0; 
      } 
      maze[row][column] = c; 
      column++; 
     } 

     //Test it 

     for (row = 0; row < numberOfRows; row++) { 
      System.out.print("Row "+row+": "); 
      for (column = 0; column < numberOfColumns; column++) { 
       // Convert 1D array into 2D array 
       System.out.print(maze[row][column]); 
       count++; 
      } 
      System.out.println(); 
     }  
    } 

} 

выход

Row 0: This is my 
Row 1: test stri 
Row 2: ng with so 
Row 3: me words i 
Row 4: n it. 
+0

Спасибо. Я попробую. –

+0

Я отредактировал свое оригинальное сообщение. Посмотрите внизу. Благодаря! –

Смежные вопросы