标签:data 存在 文件 sar string fileread 程序 实现 null
? 1.记录数组一共有几行几列,有几个不同的值
? 2.把具有不同值的元素的行列及值记录在一个小的规模的数组中,从而缩小程序的规模
1.记录数组一共有几行几列,有几个不同的值
2.把具有不同值的元素的行列及值记录在一个小的规模的数组中,从而缩小程序的规模
? 我们可以清楚的看到,数组由原来的6x7,转化为稀疏数组后只有3x8了
1.使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)
2.把稀疏数组存盘,并且可以从新恢复原来的二维数组数
3.整体思路分析
1.将稀疏数组保存在磁盘上,比如map.data
2.恢复原来的数组时,读取map.data进行恢复。
//创建原始数组
int chessArr[][] = new int[11][11];
/*模拟存储棋盘数据
* 落子位置:
* 1:黑子
* 2:白字
* 0:没有棋子
* */
chessArr[1][2] = 1;
chessArr[2][3] = 2;
//展示原始数组
System.out.println("原始数组:");
for (int[] row : chessArr) {
for (int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
//统计原始数组的有效数据个数
int sum = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr.length; j++) {
if (chessArr[i][j]!=0){
sum++;
}
}
}
//创建稀疏数组
int sparseArr[][] = new int[sum+1][3];
//初始化稀疏数组
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
//将稀疏数组转化为二维数组
int count = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr.length; j++) {
if (chessArr[i][j]!=0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr[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("==================================");
//将二维数组写入文件map.data
File file = new File("D:\\map.data");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
System.out.println("保存中。。。");
for (int i = 0; i < sparseArr.length; i++) {
String data = sparseArr[i][0] + "\t" + sparseArr[i][1] + "\t" + sparseArr[i][2] + "\n";
bw.write(data);
}
bw.close();
//从硬盘中读取稀疏数组数据
BufferedReader br = new BufferedReader(new FileReader(file));
//新建一个数组用来存储读取到的数据
List<String> list = new ArrayList<>();
//新建一个字符串来保存读取的每一行
String line = "";
while((line = br.readLine())!=null){
list.add(line);
}
br.close();
//新建一个稀疏数组
int newSparseArr[][] = new int[list.size()][3];
for (int i = 0; i < list.size(); i++) {
//获取原稀疏数组的每一行
String[] row = list.get(i).split("\t");
//将原稀疏数组的数据赋值给新稀疏数组
for (int j = 0; j < row.length; j++) {
newSparseArr[i][j] = Integer.parseInt(row[j]);
}
}
//输出新的稀疏数组:
System.out.println("读取的稀疏数组:");
for (int i = 0; i < newSparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n", newSparseArr[i][0], newSparseArr[i][1], newSparseArr[i][2]);
}
System.out.println("================================");
//用新的稀疏数组还原二维数组
int chessArr2[][] = new int[newSparseArr[0][0]][newSparseArr[0][1]];
for (int i = 1; i < newSparseArr.length; i++) {
chessArr2[newSparseArr[i][0]][newSparseArr[i][1]] = newSparseArr[i][2];
}
//输出二维数组
System.out.println("还原的二维数组:");
for (int[] row : chessArr2) {
for (int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
标签:data 存在 文件 sar string fileread 程序 实现 null
原文地址:https://www.cnblogs.com/dabbie/p/13874987.html