题目要求:根据原始数组创建稀疏数组,将稀疏数组存盘再读出,根据稀疏数组再还原回原始数组
package com.bupt.sparsearray;
import java.io.*;
public class SparseArrayTest {
public static void main(String[] args) {
//创建原始的数组
int[][] original = new int[11][11];
original[2][3] = 5;
original[4][7] = 7;
original[1][0] = 10;
//print2Arr(original);
//根据原始数组创建稀疏数组
//1、统计原始数组不为0的个数
int sum=0;
int col = 0;
int line = 0;
for (line=0;line< original.length;line++){
for (col=0; col < original[0].length; col++) {
if(original[line][col] != 0){
sum++;
}
}
}
//2、创建稀疏数组
int count = 1;
int[][] sparseArray = new int[sum+1][3];
sparseArray[0][0] = line;
sparseArray[0][1] = col;
sparseArray[0][2] = sum;
for (int i = 0; i < original.length; i++) {
for (int j = 0; j < original[0].length; j++) {
if(original[i][j] != 0){
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = original[i][j];
count++;
}
}
}
//print2Arr(sparseArray);
//将稀疏数组存盘
String path = "sparseArray.txt";
File file = new File(path);
saveSparseArr(sparseArray,file);
//将稀疏数组从文件中读出
readSparseArr(file);
}
private static void readSparseArr(File file) {
BufferedReader bufferedReader = null;
int count=0;
//读取文件,获取数组的行数count,用来创建稀疏数组
try {
FileReader fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
while(bufferedReader.readLine()!=null){
count++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bufferedReader != null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
bufferedReader = new BufferedReader(new FileReader(file));
int[][] sparseArr = new int[count][3];
int i=0;
int j=0;
String strs = null;
while((strs=bufferedReader.readLine())!=null){
String[] strings = strs.split("\t");
for(String str:strings){
sparseArr[i][j] = Integer.parseInt(str);
j++;
}
j=0;
i++;
}
print2Arr(sparseArr);
//根据稀疏数组还原出原来的二维数组
int[][] origin = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int k = 0; k < origin.length; k++) {
for (int l = 0; l < origin[0].length; l++) {
for (int m = 0; m < sparseArr.length ; m++) {
if(k==sparseArr[m][0] && l==sparseArr[m][1]){
origin[k][l] = sparseArr[m][2];
break;
}
}
}
}
print2Arr(origin);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bufferedReader != null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void saveSparseArr(int[][] sparseArray, File file) {
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(file);
for (int i = 0; i < sparseArray.length; i++) {
fileWriter.write(sparseArray[i][0]+"\t");
fileWriter.write(sparseArray[i][1]+"\t");
fileWriter.write(sparseArray[i][2]+"\n");
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fileWriter != null){
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void print2Arr(int[][] original) {
for (int i = 0; i < original.length; i++) {
for (int j = 0; j < original[0].length; j++) {
System.out.print(original[i][j]+"\t");
}
System.out.println();
}
}
}