day1学习笔记
使用了IO流完成了对数据的存储和读取
package 稀疏矩阵;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class SparseArray {
public static void main(String[] args) throws FileNotFoundException, Exception {
//创建原始二维数组 11*11
//0表示没子 1表示黑子 2表示蓝子
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
System.out.println("原始的二维数组:");
for (int[] row : chessArr1) {
for(int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
//将二维数组转换为稀疏数组
//遍历二维数组得到非0数据的个数
int sum = 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if(chessArr1[i][j] != 0) {
sum++;
}
}
}
System.out.println("sum = "+sum);
//创建对应的稀疏数组
int sparseArr[][] = new int[sum +1][3];
//给稀疏数组赋值
sparseArr[0][0] =chessArr1.length;
sparseArr[0][1] = chessArr1[0].length;
sparseArr[0][2] = sum;
//遍历二维数组将非0的值存放到稀疏数组
int count = 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if(chessArr1[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
System.out.println();//换行
System.out.println("得到的稀疏数组为:");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
System.out.println();
//将稀疏数组恢复为原数组
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
System.out.println("稀疏数组恢复后得到的原数组为:");
for (int[] row : chessArr2) {
for(int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
System.out.println("存储数据中。。。。。");
File f = new File("F:/java资料/map.txt");
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter outf=new OutputStreamWriter(fos,"UTF-8");
for(int i=0;i<sparseArr.length;i++) {
outf.write(String.valueOf(sparseArr[i][0]));
outf.write(",");
outf.write(String.valueOf(sparseArr[i][1]));
outf.write(",");
outf.write(String.valueOf(sparseArr[i][2]));
outf.write(",");
}
outf.close();
fos.close();
System.out.println("存储成功");
System.out.println("开始读取数据");
Thread.sleep(3000);
FileInputStream fis = new FileInputStream(f);
InputStreamReader inf = new InputStreamReader(fis,"UTF-8");
StringBuffer sb=new StringBuffer();
while(inf.ready()){
sb.append((char)inf.read());
}
inf.close();
fis.close();
System.out.println("读取成功");
String ss=sb.toString();
String[] sb1=sb.toString().split(",");
System.out.println("读取数据字符串为:");
System.out.println(ss);
int num2=1;
int[][] sp=new int[sb1.length/3][3];
sp[0][0]=Integer.parseInt(sb1[0]);
sp[0][1]=Integer.parseInt(sb1[1]);
sp[0][2]=Integer.parseInt(sb1[2]);
for(int i=3;i<sb1.length;i+=3){
sp[num2][0]=Integer.parseInt(sb1[i]);
sp[num2][1]=Integer.parseInt(sb1[i+1]);
sp[num2][2]=Integer.parseInt(sb1[i+2]);
num2++;
}
System.out.println("还原稀疏数组:");
System.out.println("row"+"\t"+"col"+"\t"+"val");
for(int[] row:sp){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
int chessArr3[][] = new int[sp[0][0]][sp[0][1]];
for (int i = 1; i < sp.length; i++) {
chessArr3[sp[i][0]][sp[i][1]] = sp[i][2];
}
System.out.println("稀疏数组恢复后得到的原数组为:");
for (int[] row : chessArr3) {
for(int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}