我在下面有一个构造函数,它从文本文件中读取并获取每一行并将其分配给多维数组中的一个部分。
public ValueToArray(int rowsI, int columnsI, File fileLocationI){
int i;
int j;
InputStream fileInputStream;
BufferedReader bufferedReader;
String line;
rows = rowsI;
columns = columnsI;
count = 0;
fileLocation = fileLocationI;
array = new String[rows][columns];
try{
fileInputStream = new FileInputStream(fileLocation);
bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream, Charset.forName("UTF-8")));
for(i = 0; i < rows; i++){ // iterate through row
for(j = 0; j < columns; j++){ // iterate through column
while((line = bufferedReader.readLine())!= null){ // while the next line is not null
array[i][j] = line; // assign i-th j-th index as line (the input)
// System.out.println(array[i][j]);
count++;
}
}
}
bufferedReader.close();
}catch(Exception e){
e.printStackTrace();
}
}
我还写了一个打印出数组所有值的方法:
public void returnArray(){
for(int i = 0; i < rows; i++){ // iterate through row
for(int j = 0; j < columns; j++){ // iterate through column
System.out.println(array[i][j]);
}
}
}
这是我的问题:
如果我在构造函数的while循环中有System.out.println(array[i][j]);
,我可以打印出所有值,但是,我的returnArray()
方法只返回第一个索引后的空值,即
0,0,0
null
null
null
null
null
我想知道我的方法,甚至我的构造函数是什么问题导致了nulls
?我的IDE中似乎没有出现任何错误。
答案 0 :(得分:2)
for(i = 0; i < rows; i++){ // iterate through row
for(j = 0; j < columns; j++){ // iterate through column
while((line = bufferedReader.readLine())!= null){ // while the next line is not null
array[i][j] = line; // assign i-th j-th index as line (the input)
// System.out.println(array[i][j]);
count++;
}
}
}
进入第二个for循环后,while循环将继续放置所有值,并将它们覆盖到数组[0] [0]。因此,在第一次迭代中,您的整个文件都被读取,文件中的最后一行是您在[0] [0]处的那一行。之后,每次迭代都会跳过,因为文件中没有更多行。因此,它们都具有空值。
答案 1 :(得分:1)
所以试试这个..
for(i = 0; i < rows; i++){ // iterate through row
for(j = 0; j < columns; j++){ // iterate through column
while((line = bufferedReader.readLine())!= null){ // while the next line is not null
array[i][j] = line; // assign i-th j-th index as line (the input)
// System.out.println(array[i][j]);
count++;
break;
}
}
}