获得了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]]?
答案 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]]