数组的结果是null?

时间:2012-10-04 11:27:14

标签: java arrays methods

我不久前发了一个问题,这个问题得到了解答并帮了我很多忙。很抱歉这么快就发布了。 = /

我已经完成了这个,并且不确定我做错了什么,印刷的结果是几个'无效'的话。我试图通过使用方法使用文本文件中的数据填充二维数组。然后在主类中运行该方法以打印出已填充的数组。

非常感谢任何帮助,谢谢你提前。 =)

主类:

public static void main(String[] args) throws IOException {

    ScoreProcessor scores = new ScoreProcessor();

    String[][] table = scores.readFile();


    for (int row = 0; row < table.length; row++) {
        for (int col = 0; col < table[row].length; col++) {
            System.out.print(table[row][col] + "\t");
        }
    }
}

另一个类,包括方法:

    public class ScoreProcessor {

    static public String[][] readFile() throws IOException {

        File filedata = new File("src/JavaApp2/Data.txt");
        Scanner file = new Scanner(filedata);

        int row = 0, col = 0;

        String[][] scores = new String[8][5];


        while (file.hasNext()) {

            Scanner readfile = new Scanner(filedata);
            readfile.nextLine();
            readfile.useDelimiter(",");

            while (readfile.hasNext(",")) {
              String line =  readfile.next();


             line = scores[row][col] ;
                col++;
            } // end innerloop
            row++;
            col = 0;


        } // end outerloop

        return scores;
    } // end method
} // end class

数据文件

Student,Q1,Q2,Q3,Q4
abcd0001,50,55,59,72
efgh0002,82,78,84,86
ijkl0003,42,45,46,52
mnop0004,66,74,72,78
qrst0005,82,86,89,88
uvwx0006,77,83,87,82
yzab0007,62,64,70,68

6 个答案:

答案 0 :(得分:2)

该行

while (file.hasNextInt())

将返回false。因此,您的数组不会使用数据初始化并返回null打印。

如果readfile.nextLine()返回null,我建议您检查一下这个事实。

答案 1 :(得分:2)

正如其他人所指出的那样,file.hasNextInt()返回false,因为你正在读取的行不是int。因为它是null,所以你的代码永远不会进入循环,数据也不会被提供。

   Scanner readfile = new Scanner(filedata);
   String line1 = readfile.nextLine();
   readfile = readfile.useDelimiter(",");

不要再次打开文件,只需读取每一行并将其拆分为','

String line = file.nextLine();

for (String each: line.split(",")) {
   scores[row][col] = each;
}

答案 2 :(得分:1)

试试这个:

 public class ScoreProcessor {

        public static String[][] readFile() throws IOException {

            File filedata = new File("src/JavaApp2/Data.txt");
            Scanner file = new Scanner(filedata);

            int row = 0;

            String[][] scores = new String[8][5];

            while(file.hasNextLine()){
                String line=file.nextLine();
                scores[row]=line.split(",");
                row++;
            }

            return scores;
        } 

        public static void main(String[] args) throws IOException {

            String[][] table = readFile();

            for (int row = 0; row < table.length; row++) {
                for (int col = 0; col < table[row].length; col++) {
                    System.out.print(table[row][col] + "\t");
                }
                System.out.print("\n");
            }
        }

    }

答案 3 :(得分:0)

查看hasNextInt()的定义。如果下一个令牌不能作为int解释,它将返回false。

我看到它的方式,你的文件以&#34; Student&#34;开头,或者如果你跳过标题行,使用&#34; abcd0001&#34;,但不是int。所以hasNextInt()会立即返回false,而你的内循环永远不会被执行。

除此之外,我不清楚为什么要实例化第二个Scanner

使用调试器可以非常容易地跟踪这样的问题,我建议您熟悉这种方法:)

答案 4 :(得分:0)

使用file.hasNext()insted file.hasNextInt(),它应该解决问题

答案 5 :(得分:0)

不是这个(除了HasNextInt())问题的核心:

line = scores[row][col] ;

应该是另一种方式。这样,您的数组永远不会被填充,当然也只包含空值。

scores[row][col] = line;