1

不久前我发布了一个问题,该问题得到了回答并帮助了我很多。抱歉这么快又发帖了。=/

我已经检查过了,不确定我做错了什么,打印的结果是几个“空”字。我正在尝试使用一种方法用文本文件中的数据填充二维数组。然后在主类中运行该方法以打印出填充的数组。

任何帮助将不胜感激,在此先感谢您。=)

主类:

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
4

6 回答 6

2

线

while (file.hasNextInt())

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

我建议您检查是否 readfile.nextLine()退货null

于 2012-10-04T11:43:09.497 回答
2

正如其他人指出的那样, file.hasNextInt() 返回 false,因为您正在阅读的行不是 int。由于它为空,因此您的代码永远不会进入循环,并且不会提供数据。

   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;
}
于 2012-10-04T12:02:50.323 回答
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");
            }
        }

    }
于 2012-10-04T12:32:36.423 回答
0

查看hasNextInt()的定义。如果下一个标记不可解释为 int,它将返回 false。

在我看来,您的文件以“Student”开头,或者如果您跳过标题行,则以“abcd0001”开头,但不是int。所以hasNextInt()会立即返回 false ,并且你的内部循环永远不会被执行。

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

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

于 2012-10-04T11:43:27.343 回答
0

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

于 2012-10-04T11:46:16.880 回答
0

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

line = scores[row][col] ;

应该是其他方式。这样你的数组将永远不会被填充,当然总是只包含空值。

scores[row][col] = line;
于 2012-10-04T12:40:20.260 回答