将二维数组转换为二维Java

时间:2020-04-09 23:41:20

标签: java arrays multidimensional-array

获得了array

String[]array = song.split("");
[W, U, B, W, U, B, A, B, C, W, U, B]

我需要将其转换为二维

String[][]arr = new String[4][3];

[[W, U, B], [W, U, B], [A, B, C], [W, U, B]]

下面的代码:

for (int i = 0; i <arr.length ; i++) {
        for (int j = 0; j <arr[j].length ; j++) {
            arr[i][j] = array[j];
        }
    }

给出结果:

[[W, U, B], [W, U, B], [W, U, B], [W, U, B]]

如何获取:

[[W, U, B], [W, U, B], [A, B, C], [W, U, B]]?

4 个答案:

答案 0 :(得分:2)

您为arr[i][j]分配了错误的值:

for (int i = 0; i <arr.length ; i++) {
    for (int j = 0; j <arr[j].length ; j++) {
        arr[i][j] = array[i * arr[j].length + j];
    }
}

答案 1 :(得分:0)

您可以执行一个循环,遍历array,然后使用除法和余数运算符计算arr中的索引。

for (int i = 0; i < array.length; i++)
    arr[i / 3][i % 3] = array[i];

测试

String song = "WUBWUBABCWUB";
String[] array = song.split("");
System.out.println(Arrays.toString(array));

String[][] arr = new String[4][3];
for (int i = 0; i < array.length; i++)
    arr[i / 3][i % 3] = array[i];
System.out.println(Arrays.deepToString(arr));

输出

[W, U, B, W, U, B, A, B, C, W, U, B]
[[W, U, B], [W, U, B], [A, B, C], [W, U, B]]

答案 2 :(得分:0)

问题出在arr[i][j] = array[j]中。变量j应该继续。而是使用一个变量,该变量在外循环传递到下一个迭代时不再分配0,因为内循环会再次分配j = 0。在循环外使用另一个计数器来维护值,在这种情况下为k

public class Main
{
    public static void main(String[] args)
    {

        String[] array = { "W", "U", "B", "W", "U", "B", "A", "B", "C", "W", "U", "B" };
        String array2[][] = new String[4][3];

        // One dimension array into a two dimension array.
        int k = 0;
        for (int i = 0; i  <array2.length ; i++)
        {
            for (int j = 0; j < array2[j].length; j++)
            {
                array2[i][j] = array[k++];
            }
        }

        // Print 1 dimension array.
        System.out.println("array:");
        for (int i = 0; i < array.length; i++)
        {
            System.out.print(array[i] + " ");
        }

        // Print 2 dimension array.
        System.out.println("\n\narray2:");
        for (int i = 0; i < array2.length; i++)
        {
            for (int j = 0; j < array2[i].length; j++)
            {
                System.out.print(array2[i][j] + " ");
            }

            System.out.println();
        }

    }
}

答案 3 :(得分:0)

您可以按如下方式处理此数组:

String[] arr = "WUBWUBABCWUB".split("");

String[][] arr2d = IntStream
        .iterate(0, i -> i < arr.length, i -> i + 3)
        .mapToObj(i -> Arrays
                .stream(arr, i, Math.min(i + 3, arr.length))
                .toArray(String[]::new))
        .toArray(String[][]::new);

System.out.println(Arrays.deepToString(arr2d));
// [[W, U, B], [W, U, B], [A, B, C], [W, U, B]]

另见:Copying a 1d array to a 2d array