1

少し前に質問を投稿しましたが、回答があり、とても助かりました。久しぶりの投稿失礼します。=/

私はこれを調べましたが、何が間違っていたのかわかりません.印刷された結果はいくつかの「null」単語です. メソッドを使用して、テキスト ファイルのデータを 2 次元配列に取り込もうとしています。次に、そのメソッドをメイン クラスで実行して、入力された配列を出力します。

どんな助けでも大歓迎です、事前に感謝します。=)

メインクラス:

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

他の人が指摘しているように、intではなく行を読んでいるため、file.hasNextInt()はfalseを返します。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;
}
于 2012-10-04T12:02:50.323 に答える
2

この線

while (file.hasNextInt())

戻りfalseます。したがって、配列はデータで初期化されず、null印刷が返されます。

readfile.nextLine()返品するかどうかを確認することをお勧めします null

于 2012-10-04T11:43:09.497 に答える
1

try this:

 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

file.hasNextInt() の代わりに file.hasNext() を使用すると、問題が解決するはずです

于 2012-10-04T11:46:16.880 に答える
0

hasNextInt()の定義を確認してください。次のトークンが int として解釈できない場合は false を返します。

私の見方では、ファイルは「Student」で始まるか、ヘッダー行をスキップすると「abcd0001」で始まりますが、int ではありません。したがってhasNextInt()、すぐに false が返され、内側のループが実行されることはありません。

それを超えて、なぜあなたが秒をインスタンス化するのかは私には明らかではありませんScanner

このような問題は、デバッガーを使用して非常に簡単に追跡できます。そのアプローチに慣れることをお勧めします:)

于 2012-10-04T11:43:27.343 に答える
0

これも(HasNextInt()以外に)問題の核心ではありませんか:

line = scores[row][col] ;

逆であるべきです。このようにして、配列がいっぱいになることはなく、もちろん常に null のみが含まれます。

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