简体   繁体   English

将 Java 一维数组转换为二维数组

[英]Convert Java 1D array into 2D array

No matter what code snippet that I try, of which I find on the Internet (mostly from Stack Exchange/Overflow), I can't figure out how to convert (or "assign") elements of a one-dimensional array into a two-dimensional 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++;
    }
}

The answer by Jags below works well, but it's not perfect.下面 Jags 的答案效果很好,但并不完美。 It prints:它打印:

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

//rows*col must equal to single d array //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;
    }

Below sample code should work.下面的示例代码应该可以工作。 You need to loop through oneDcharArray rather then rows/columns.您需要遍历 oneDcharArray 而不是行/列。 But note that, it all depends on what is your requirement to create maze.但请注意,这完全取决于您创建迷宫的要求。 ie how exactly you want to devide available chars into N x M array.即您想如何将可用字符划分为 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();
        }       
    }

}

output输出

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM