java中的稀疏数组

Java的稀疏数组

本节内容的主要需要注意的是数组转换时的下标

package array;

public class ArrayDemo06 {
   //创建一个二维数组 11*11 0:没有旗子 1:黑棋 2:白棋
   public static void main(String[] args) {
       int [] [] array1 = new int[11][11];
       array1[1][2]=1;
       array1[2][3]=2;//给二维数组定义两个数
       array1[4][5]=1;
       array1[5][6]=2;
       array1[6][7]=1;
       //输出原始数组;
       System.out.println("输出原始数组");
       //遍历原始数组的代码
       for (int [] ints:array1){
           for (int anInt:ints){
               System.out.print(anInt+"\t");
          }
           System.out.println();
      }
       //创建稀疏数组
       //得到原始数组的数据,如不同元素的个数,下标、具体值。
       int sum=0;
       for (int i = 0; i < array1.length; i++) {       //这两行的代码为遍历数组,行循环
           for (int j = 0; j < array1.length; j++) {   //每一行的列循环
               if (array1[i][j]!=0){
                   sum++;
              }
          }
      }
       System.out.println("原始数据不同数值的个数为:"+sum);
       //先创建一个三列的二维数组
       int [] [] array2 = new int[sum+1][3];           //下面这三行代码为定义稀疏数组的表头
       array2[0][0]=11;                                //对稀疏数组的第一行的数据进行定义,值为二维数组的行数
       array2[0][1]=11;                                //定义第一行的第二个元素,值为二维数组的每一行的列数
       array2[0][2]=sum;                               //定义第一行的第三个元素,值为二维数组中的不同数值的个数
       int count = 0;
       for (int i = 0; i < array1.length; i++) {
           for (int j = 0; j < array1[i].length; j++) {
               if (array1[i][j]!=0){
                   count++;
                   array2[count][0]=i;                 //不同数字它的x坐标,也就是他的列下标
                   array2[count][1]= j;                //不同数字它的y坐标,也就是他的列下标
                   array2[count][2]=array1[i][j];      //将不同元素的具体的数值放在第三个元素中
              }
          }
      }
       System.out.println("输出稀疏数组:");
       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();                       //每一行输出完,换行输出下一行的数据
      }

       //再把稀疏数组转换为原始数组
       System.out.println("输出稀疏数组转换后的原始数组:");
       int [] [] array3 = new int[array2[0][0]][array2[0][1]]; //读取稀疏数组中表头中存放的原始数组的行数和列数。
       for (int i = 1; i <array2.length ; i++) {
           for (int j = 0; j < array2[i].length; j++) {
               array3[array2[i][0]][array2[i][1]]=array2[i][2];//因为数组默认全是零。只需要读取不同元素的行列值并赋值就行了
          }
      }
       for (int [] ints:array3){
           for (int anInt:ints){
               System.out.print(anInt+"\t");
          }
           System.out.println();
      }
  }

}
 
posted @ 2022-10-14 17:27  zhazhawei906  阅读(154)  评论(0)    收藏  举报