public class SparsearrayOne {
public static void main(String[] args) throws 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.length;j++){
if (chessArr1[i][j]!=0){
sum++;
}
}
}
//创建对应的稀疏数组
int sparseArr[][]=new int[sum+1][3];
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
//遍历二维数据,将非0的值放到稀疏数组中
int count=0;
for (int i=0;i< chessArr1.length;i++){
for (int j=0;j<chessArr1.length;j++){
if (chessArr1[i][j]!=0){
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr1[i][j];
}
}
}
//输出稀疏数组的形式,%d\t每一个值换行
System.out.println("得到的稀疏数组如下");
for (int i=0;i< sparseArr.length;i++){
System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
System.out.println();
}
//将稀疏数组写入到文件中,文件名为map.data
System.out.println("将稀疏数组写入文件map.data中");
File file=new File("D:\\map.data");
FileOutputStream fileOutputStream=new FileOutputStream(file);
OutputStreamWriter writer=new OutputStreamWriter(fileOutputStream,"utf-8");
for (int i=0;i< sparseArr.length;i++){
if (i==sparseArr.length-1){
writer.write(sparseArr[i][0]+","+sparseArr[i][1]+","+sparseArr[i][2]);
}else {
writer.write(sparseArr[i][0]+","+sparseArr[i][1]+","+sparseArr[i][2]+"\n");
}
}
writer.close();
fileOutputStream.close();
System.out.println("写入成功");
//将稀疏数组转二维数据,首先读取文件
FileInputStream fileInputStream=new FileInputStream(file);
InputStreamReader reader=new InputStreamReader(fileInputStream,"utf-8");
StringBuffer sb=new StringBuffer();
while (reader.ready()){
sb.append((char) reader.read()); //加入stringBuffer, 转为char,不然只会打印地址
}
System.out.println("读取的文件内容"+sb.toString());
reader.close();
fileInputStream.close();
//把读出的文件,赋值给稀疏数据
String[] str=sb.toString().split("\n|,");
int sparseArray3[][]=new int[str.length/3][3];
int i=0;
for (String s:str){
sparseArray3[i/3][i%3] =Integer.parseInt(s);
i++;
}
//输出读取到的稀疏数组
System.out.println("输出读取到的稀疏的数组如下");
for (int k=0;k<sparseArray3.length;k++){
System.out.printf("%d\t%d\t%d\t",sparseArray3[k][0],sparseArray3[k][1],sparseArray3[k][2]);
System.out.println();
}
}
}
将稀疏数组放到磁盘文件中并读取
最新推荐文章于 2024-09-27 00:45:01 发布