Java的稀疏数组
本节内容的主要需要注意的是数组转换时的下标
package array;标签:java,int,array2,array1,稀疏,System,数组,out From: https://www.cnblogs.com/zhazhawei906/p/16792369.html
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();
}
}
}