我想从java中的单维数组创建一个多维数组。
我的单维数组就像
int[] grid = {5, 3, 1, 2, 0, 4, 1, 1, 3 };
我想在运行时创建一个3x3 diminsions矩阵,因为这个数组中有9个元素。任何人都可以为此提出一些好主意。 任何人都可以建议我在下面的代码中应该做什么,以便它可以给我3个阵列的arraylist或者如果有人可以让我更好地想要执行此操作。我知道下面的代码中有错误。
ArrayList<int[]> matrix = new ArrayList<>();
int[] tempArray = new int[n];
int j = 0;
for(int i=0 ; i<=grid.length; i++){
if((i+1) / 3 == 0){
matrix.add(tempArray);
j=0;
}else{
tempArray[j] = grid[i];
j++;
}
}
谢谢
答案 0 :(得分:4)
Java本身就是多维数组;您不需要在ArrayList
中使用数组创建自己的数组。
这样的东西可以给你你想要的东西:
int[] grid = {5, 3, 1, 2, 0, 4, 1, 1, 3 };
int [][] matrix = new int[3][3];
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
matrix[x][y] = grid[x + y * 3];
}
}
答案 1 :(得分:0)
你的迭代步骤离数组太远了; grid.length
为您提供值9,最高索引为8 - 将结束条件更改为严格小于长度。
当您准备将新阵列放入ArrayList
时,也不会重新初始化新阵列。我建议在添加矩阵后,创建一个tempArray
的新实例:
matrix.add(tempArray);
tempArray = new int[n];
j++;
当您准备好将某些元素重新添加到j
时,请不要将ArrayList
重置为0 - 这会将其放回原来的位置。自动递增i
同样存在问题 - 您必须知道i
可能比您预期的更进一步。
最后,我建议使用模数运算符而不是这样分割 - 模数以相同的方式工作,并且更容易阅读。
if(i % 3 == 0) { // Analogous to adding one and dividing by 3.
答案 2 :(得分:0)
public class sample {
public static void main(String args[])
{
int[] grid = {5, 3, 1, 2, 0, 4, 1, 1, 3 };
int i=0,j=0;
int count=-1;int k;
int[][] arr=new int[3][3];
for(i=0;i<3;i++)
{
count++;
for(j=0;j<3;j++)
{
if(count == 0)
{
k=j;
arr[i][j]=grid[k];
}
if(count == 1)
{
k=j+3;
arr[i][j]=grid[k];
}
if(count == 2)
{
k=j+6;
arr[i][j]=grid[k];
}
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
System.out.print(arr[i][j]+" ");
}
System.out.println(" ");
}
}
}