稀疏数组
基本介绍
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/726b4c3b508b696973aa87087ec40476.png)
package com.zx.sparsearray;
import java.awt.Desktop;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class SparseArray {
public static void main(String[] args) {
int[][] checkerboard = new int[11][11];
checkerboard[1][2] = 1;
checkerboard[2][3] = 2;
System.out.println("当前棋盘……");
for(int[] row:checkerboard) {
for(int data:row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
int count = 0;
for(int[] row:checkerboard) {
for(int data:row) {
if(data != 0) {
count++;
}
}
}
System.out.println("当前棋盘中棋子的个数\t" + count);
int[][] spraseArr = new int[count+1][3];
spraseArr[0][0] = 11;
spraseArr[0][1] = 11;
spraseArr[0][2] = count;
int index = 1;
for(int i = 0;i<checkerboard.length;i++) {
for(int j = 0;j < checkerboard[i].length;j++) {
if(checkerboard[i][j] != 0) {
spraseArr[index][0] = i;
spraseArr[index][1] = j;
spraseArr[index][2] = checkerboard[i][j];
index++;
}
}
}
File file = new File("D:\\projects\\eclipse\\DataStructrue\\src\\com\\zx\\sparsearray\\Sparse.checkerboard");
FileOutputStream fo = null;
OutputStreamWriter osw = null;
try {
fo = new FileOutputStream(file);
osw = new OutputStreamWriter(fo,"UTF-8");
System.out.println("稀疏数组……" );
for(int i = 0;i<spraseArr.length;i++) {
System.out.printf("%d\t%d\t%d\t\n",spraseArr[i][0],spraseArr[i][1],spraseArr[i][2]);
try {
if (i == spraseArr.length - 1) {
osw.write(spraseArr[i][0] + "," + spraseArr[i][1] + "," + spraseArr[i][2]);
}else {
osw.write(spraseArr[i][0] + "," + spraseArr[i][1] + "," + spraseArr[i][2] + ",");
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("写入文件中...");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
osw.close();
fo.close();
System.out.println("写入文件成功...");
System.out.println("打开文件中...");
Desktop.getDesktop().open(file);
} catch (IOException e) {
e.printStackTrace();
}
}
FileInputStream fis = null;
InputStreamReader isr = null;
StringBuffer sb = null;
try {
fis = new FileInputStream(file);
isr = new InputStreamReader(fis);
sb = new StringBuffer();
while(isr.ready()) {
sb.append((char)isr.read());
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
isr.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("读取的数据");
System.out.println(sb.toString());
String[] str = sb.toString().split(",");
int[][] newSparseArr = new int[str.length / 3][3];
int ai = 0;
for (String s : str) {
newSparseArr[(ai - (ai % 3)) / 3][ai % 3] = Integer.parseInt(s);
ai++;
}
int[][] newCheckerBoard = new int[newSparseArr[0][0]][newSparseArr[0][1]];
for(int i = 1;i<newSparseArr.length;i++) {
newCheckerBoard[newSparseArr[i][0]][newSparseArr[i][1]] = newSparseArr[i][2];
}
System.out.println("读取稀疏数组后的新棋盘……");
for(int[] row:newCheckerBoard) {
for(int data:row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}