我在下面有一个构造函数,该构造函数从文本文件中读取并占用每一行,并将其分配给多维数组中的某个部分。

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似乎没有出现任何错误。

最佳答案

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循环将继续放置所有值并将其覆盖到array [0] [0]。因此,在第一个迭代本身中,将读取整个文件,文件的最后一行是您在[0] [0]处拥有的文件。之后,每次迭代都会跳过一段时间,因为文件中没有更多行。因此,它们都具有空值。

09-05 18:21