簡體   English   中英

從java中的單維數組創建多維數組

[英]create Multi-dimensional array from single dimensional array in java

我想從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++;
        }
    }   

謝謝

Java本身就是多維數組; 您不需要在ArrayList使用數組創建自己的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];
  }   
}

你的迭代步驟離數組太遠了; grid.length給出值9,最高索引為8 - 將結束條件更改為嚴格小於長度。

當您准備將新數組放入ArrayList時,也不要重新初始化新數組。 我建議你在添加矩陣后,創建一個新的tempArray實例:

matrix.add(tempArray);
tempArray = new int[n];
j++;

當您准備好將一些元素重新添加到ArrayList時,不要將j重置為0 - 這會將它放回到它開始的位置。 自動遞增i同樣的問題 - 你必須要知道i可能比你想要的更進一步。

最后,我建議使用模數運算符而不是將其分割 - 模數以相同的方式工作,並且更容易閱讀。

if(i % 3 == 0) { // Analogous to adding one and dividing by 3.
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(" ");
    }

  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM