Конвертировать одномерный массив в двухмерное Java - PullRequest
1 голос
/ 10 апреля 2020

Получил 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]]?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Вы присваиваете неправильное значение 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];
    }
}
0 голосов
/ 10 апреля 2020

Проблема в arr[i][j] = array[j]. Переменная j должна продолжаться. Вместо этого используйте переменную, которая не присваивает 0 снова, когда внешний l oop переходит к следующей итерации, потому что внутренний l oop снова выполняет присвоение 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();
        }

    }
}
0 голосов
/ 10 апреля 2020

Вы можете сделать это с помощью одного l oop, итерируя по array и вычисляя индексы в arr, используя операторы деления и остатка.

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

Test

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]]
...