今天在学读取本地磁盘的文件时遇到了一些问题。
包括一下几个地方:
1.while循环内计数器记不准。
2.错用了两个for循环。
3.文件的分行读取与字符串剪切。
4.分析out_i出的循环,虽然有冗余和不正确,但不至于报错啊
import java.io.*;
public class SparseTest {
public static void main(String[] args) {
int[][] arr = new int[10][10];
arr[0][3] = 1;
arr[1][2] = 2;
arr[2][3] = 2;
int sum = 0;
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
if(anInt != 0) sum++;
}
System.out.println();
}
System.out.println(sum);
int[][] sparseArr = new int[sum+1][3];
int count = 0;
sparseArr[0][0] = arr.length;
sparseArr[0][1] = arr.length;
sparseArr[0][2] = sum;
for(int i = 0;i<arr.length;i++){
for (int j = 0; j < arr.length; j++) {
if(arr[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
}
}
}
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("正在写入数据到本地>>>>>>>>>");
// BufferedWriter bufferedWriter = null;
FileWriter fos = null;
try {
fos = new FileWriter("map.txt",true);
for (int[] ints : sparseArr) {
for (int anInt : ints) {
try {
fos.write(anInt+"\t");//存入的数据乱码了!!!
} catch (IOException e) {
e.printStackTrace();
}
}
fos.write("\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("完成数据写入到本地");
//读取硬盘中的稀疏数组;
BufferedReader br = null;
int readRow = 0;//记录行数
// String[] temp =null;//读取的数组
int count_num = 0;
//建新的稀疏数组
int[][] sparseArr2 = new int[count+1][3];
try {
br = new BufferedReader(new FileReader("map.txt"));
String line = null;
//统计行数
/* arr[0][3] = 1;
arr[1][2] = 2;
arr[2][3] = 2;*/
while ((line = br.readLine()) !=null) { //调试发现line = 10\t10\t3 while循环了四次
//line = 0\t3\t1
//line = 1\t2\t2
//line = 2\t3\t2
System.out.println("sparseArr2.length = "+sparseArr2.length);
count_num++; //187 190 194 ,每次的值都不确定
String[] temp = line.split("\t");
//out_i
/*for (int i = 0; i < sparseArr2.length; i++) {//如果用了外层i循环自己就换循环四次,每次
for (int j = 0;j<temp.length;j++) { //循环中i还会取0 1 2 3
if(i >= 4) break;
sparseArr2[i][j] = Integer.parseInt(temp[j]);
System.out.println("i:---"+i);
}
}*/
for (int j = 0;j<temp.length;j++) {
if(readRow >=4) break;
sparseArr2[readRow][j] = Integer.parseInt(temp[j]);
//System.out.println("readRow:---"+readRow);
}
readRow++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//遍历稀疏数组
for (int[] ints : sparseArr2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("count_num = "+count_num);
}
}