直接上代码,代码有详细注释,跟着代码一步一步走so easily的了。
package test.llb.arry;
/*
* 二维数组转稀疏数组,以及稀疏数组转二维数组
* LLB 2019.11.13
*/
public class SparseArry {
public static void main(String[] args) {
//-----------------------------二维数组转稀疏数组--------------------------------------
//定义一个9*9的二维数组
int arry[][] = new int[9][9];
//给数组赋值 随便赋几个值
arry[1][5] = 1;
arry[2][1] = 2;
arry[6][7] = 1;
//打印输出下这个二维数组
System.err.println("原始二维数组:");
for (int[] is : arry) {
for (int i : is) {
System.err.print(i);
System.err.print(" ");
}
System.err.println();
}
//将二维数组转换成稀疏数组
//获取二维数组列数和行数
int rows = 0;//行数
int columns = 0;//列数
int count = 0;//二维数组有效个数
int count1 = 0;//记录稀疏数组行数
for (int[] is : arry) {
columns = is.length;//行数
rows++;//列数
}
//获取二维数组有效元素
for (int[] is : arry) {
for (int i : is) {
if (i != 0) {
count++;
}
}
}
//定义一个稀疏数组,行数等于二维数组有效元素个数+1,列数等于3固定的
int sparseArry[][] = new int[count+1][3];
//给稀疏数组赋值
//稀疏数组第一行值分别为 第一列值为二维数组的行数,第二列值二维数组的列数,第三列值为二维数组有效元素个数
sparseArry[0][0] = rows;
sparseArry[0][1] = columns;
sparseArry[0][2] = count;
//之后的每一行元素值分别为:第一列值为二维数组元素所在的行数,第二列值为二维数组元素的列数,第三列为元素的值
//循环遍历二维数组获取每一个元素的下标
for(int i = 0; i<rows;i++){
for (int j = 0; j < columns; j++) {
if (arry[i][j] != 0) {
count1++;//自增记录每一行
sparseArry[count1][0] = i;
sparseArry[count1][1] = j;
sparseArry[count1][2] = arry[i][j];
}
}
}
//输出稀疏数组
System.err.println("二维数组转换成稀疏数组:");
for (int[] is : sparseArry) {
for (int i : is) {
System.err.print(i+" ");
}
System.err.println();
}
//-----------------------------稀疏数组转二维数组-------------------------
//获取稀疏数组第一行第一列和第一行第二列的值,该值就为二维数组的行数和列数
//定义二维数组
int arry1[][] = new int[sparseArry[0][0]][sparseArry[0][1]];
//循环稀疏数组给二维数组赋值,稀疏数组第一行以后的每一行中的第一列代表二维数组元素的行下标,第二列代表二维数组元素的列下标,第三列代表二维数组的元素值
for (int i = 1; i < sparseArry[0][2]+1; i++) {
arry1[sparseArry[i][0]][sparseArry[i][1]] = sparseArry[i][2];
}
//转换后的二维数组:
System.err.println("转换后的二维数组:");
for (int[] is : arry1) {
for (int i : is) {
System.err.print(i+" ");
}
System.err.println();
}
}
}
加油程序员们,让我们用代码改变世界