1. 程式人生 > 其它 >java中實現稀疏陣列的轉換

java中實現稀疏陣列的轉換

package project1;

public class text1 {
  public static void main(String [] args) {
    /*寫一個稀疏陣列SpareArray
    * 1.建立一個【】【】資料
    * 2.對這個陣列進行遍歷
    * 3.求出這個陣列的有效值的個數
    * */
    System.out.println("建立陣列:");
    int[][] Array = new int[11][11];
    for(int i = 0;i < Array.length;i++) {
      for(int j = 0;j < Array[i].length;j++) {
        System.out.print(Array[i][j] + "\t");
      }
      System.out.println();
    }
      //想陣列內輸入有效值
      Array[3][4] = 1;
      Array[4][5] = 2;
      Array[5][6] = 3;
      Array[6][7] = 4;
      Array[7][8] = 5;
      Array[8][9] = 6;

      System.out.println("輸入有效值後的陣列:");
      for(int i = 0;i < Array.length;i++) {
        for(int j = 0;j < Array[i].length;j++) {
          System.out.print(Array[i][j] + "\t");
        }
        System.out.println();
      }
      //對陣列的有效值進行統計
      int sum = 0;
      for(int i = 0;i < Array.length;i++) {
        for(int j = 0;j < Array[i].length;j++) {
          if(Array[i][j] != 0) {
            sum++;
          }
        }
      }
      System.out.println("陣列的有效值個數=" + sum);
      //得到有效值的個數之後,就應該去建立稀疏陣列SpareArray
      /*稀疏陣列的特點
      * 1.只有3列
      * 2.第一行儲存原陣列的行列數和有效值個數
      * 3.剩下所有行存有效值的座標和值
      * */
      //建立並且遍歷稀疏陣列
      int[][] SpareArray = new int[sum+1][3];
      for(int i = 0;i < SpareArray.length;i++) {
        for(int j = 0;j <SpareArray[i].length;j++) {
          System.out.print(SpareArray[i][j] + "\t");
        }
        System.out.println();
      }
      //將原陣列的規模放入稀疏陣列中
      SpareArray[0][0] = 11;
      SpareArray[0][1] = 11;
      SpareArray[0][2] = sum;

      //遍歷原陣列賦值給稀疏陣列
      int count = 1;
      for(int i = 0;i <Array.length;i++) {
        for(int j = 0;j <Array[i].length;j++) {
          if(Array[i][j] != 0) {
            SpareArray[count][0] = i;
            SpareArray[count][1] = j;
            SpareArray[count][2] = Array[i][j];
            count++;
          }
        }
      }
      //輸出稀疏陣列
      System.out.println("輸出稀疏陣列:");
      for(int i = 0;i < SpareArray.length;i++) {
         for(int j = 0;j <SpareArray[i].length;j++) {
           System.out.print(SpareArray[i][j] + "\t");
         }
        System.out.println();
      }

      //稀疏陣列轉換成原陣列
      //讀取稀疏陣列第一行的資料資訊
      System.out.println("稀疏陣列轉換成原陣列:");
      int[][] Array2 = new int[SpareArray[0][0]][SpareArray[0][1]];

      //採用一維陣列遍歷二維陣列,稀疏陣列只有3列這個特點
      for(int i = 1;i < SpareArray.length;i++) {
        Array2[SpareArray[i][0]][SpareArray[i][1]] = SpareArray[i][2];
      }
      //遍歷

      for(int i = 0;i < Array2.length;i++) {
        for(int j = 0;j < Array2[i].length;j++) {
          System.out.print(Array2[i][j] + "\t");
        }
        System.out.println();
      }
  }
}