package com.liheng.test;
import java.util.Iterator;
public class Array {
public static void main(String[] args) {
//创建普通数组
int arr [][] = new int[11] [11];
arr [0][2]=1;
arr [1][3]=2;
//获取 arr 数组的个数
int sum = getRowSum(arr);
//转换 稀疏数组
int [][] checkArr = ParseArr(sum,arr);
//转换普通数组
int Arr1 [][] = getArr(checkArr);
// 输出数组
System.out.println("普通数组");
print(arr);
System.out.println("稀疏数组");
print(checkArr);
}
/**
* 获取原始数组的 数据有多少个
* @param arr
* @return
*/
public static int getRowSum(int[][] arr){
int sum =0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if(arr[i][j]!=0){
sum++;
}
//System.out.printf("%d\t",arr[i][j]);
}
//System.out.println();
}
return sum;
}
/**
* 把普通数组转换成 稀疏数组
* @param sum 数据的总数
* @param arr 普通数组
* @return 稀疏数组
*/
public static int[][] ParseArr(int sum,int arr[][]){
int check [][] = new int[sum+1][3];
int count =1;
check [0][2] = sum;
int i = 0;
for (int[] is : arr) {
check[0][0]=arr.length;
for (int j = 0; j < is.length; j++) {
check[0][1]=is.length;
//数值不为空的情况
if(arr[i][j]!=0){
//循环记录 count行 1 2 3 列的数据 I 行 J 列 data数据
check[count][0]=i;
check[count][1]=j;
check[count][2]=arr[i][j];
count++;
}
}
i++;
}
return check;
}
/**
* 将稀疏数组转换成 普通数组
* @param check 稀疏数组
* @return 普通数组
*/
public static int[][] getArr(int check[][]){
int row = check[0][0];
int col = check[0][1];
int [][] arr = new int [row][col];
for (int i = 1; i < check.length; i++) {
arr [check[i][0]] [check[i][1]] = check[i][2];
}
return arr;
}
/**
* 打印素组
* @param arr
*/
public static void print(int [][] arr){
int i =0;
for (int[] is : arr) {
for (int j = 0; j < is.length; j++) {
System.out.printf("%d\t",arr[i][j]);
}
System.out.println();
i++;
}
}
}
输出结果
稀疏数组 表示