我正在尝试将文件读入二维数组。 当我读到它时,在第一部分中,值是正确的。 当我把它写出来时,值都是“10”。 我该如何解决这个问题?
public static void readagain() {
try {
InputStream is = new FileInputStream("C:\\test.new");
int m = 16;
int n = 16;
int[][] a = new int[m][n];
int value=0;
while ((value = is.read()) != -1) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
try{
a[i][j] = value;
System.out.println("number is "+ a[i][j]);
}
catch (Exception e) {
e.printStackTrace();
}
}//j
} //i
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.println("number is "+a[i][j]);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:3)
你的第一个循环看起来会用最后一个值填充你的整个数组,而且它们都是一样的。
似乎正在发生的事情,是你在值之后获取值,然后每次都覆盖数组中的所有值。
我建议只使用1个循环,然后计算i
和j
应该是什么:
for( int x=0-; (value = is.read()) != -1) && x < m*n; x++) {
int i = x/n;
int j = x%n;
try{
a[i][j] = value;
System.out.println("number is "+ a[i][j]);
}
catch (Exception e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
您的错误与您执行操作的顺序有关。 如果我们列出你的代码流程,那么步骤就是。
这里的问题是您读取了一个值,然后继续将该值写入数组中的每个索引。因此,完成后,数组将包含每个索引中读取的最后一个值。
答案 2 :(得分:0)
你的循环是错误的。读取的最后一个值再次在整个数组中设置。在for循环中读取值将起作用。
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
try{
int value = is.read();
if (value == -1) break;
a[i][j] = value;
System.out.println("number is "+ a[i][j]);
}
catch (Exception e) {
e.printStackTrace();
}
}//j
} //i
答案 3 :(得分:0)
is.read将返回您需要将其转换为char的字节值0-255并检查它是否换行。 如果是换行符,则增加当前行。
int row = 0;
int col=0;
while ((value = is.read()) != -1) {
if(((char) value) == '\n'){
row++;
col=0;
}
a[row][col++] = value;
}