2015-10-05 100 views
-2

不管是什么代码片断,我尝试,其中我在网上找(大多是从堆栈交换/溢出),我无法弄清楚如何转换(或“分配”)将一维数组的元素转换为二维数组。将Java一维数组为二维数组

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

你怎么能保证你有足够的行容纳一维数组项? – dave

+0

提示:使用调试器,并按照'count' VAR,看看它有多高去... –

+0

什么是'numberOfRows','numberOfColumns',输入字符串的值和长度? – Rehman

回答

0

//行×COL必须等于单d阵列

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

我编辑了我原来的帖子。请看底部。谢谢! –