[英]Convert Java 1D array into 2D array
無論我嘗試什么代碼片段,其中我在互聯網上找到(主要來自 Stack Exchange/Overflow),我無法弄清楚如何將一維數組的元素轉換(或“分配”)為兩個維數組。
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
......
//rows*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;
}
下面的示例代碼應該可以工作。 您需要遍歷 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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.