1

プログラミングの課題で困っています。txt ファイルからデータを読み取り、並列配列に格納する必要があります。txt ファイルの内容は次のようにフォーマットされます。

Line1: Stringwith466numbers
Line2: String with a few words
Line3(int): 4
Line4: Stringwith4643numbers
Line5: String with another few words
Line6(int): 9

注: 「Line1:」、「Line2:」などは表示用であり、実際には txt ファイルには含まれていません。

ご覧のとおり、3 つのパターンになります。txt ファイルへの各エントリは、2 つの文字列と 1 つの int の 3 行です。

最初の行を配列に、2 行目を別の行に、3 行目を int 配列に読み込みたいと思います。次に、4 行目が最初の配列に追加され、5 行目が 2 番目の配列に追加され、6 行目が 3 番目の配列に追加されます。

このためのコードを書き込もうとしましたが、動作させることができません:

//Create Parallel Arrays
String[] moduleCodes = new String[3];
String[] moduleNames = new String[3];
int[] numberOfStudents = new int[3];

String fileName = "myfile.txt";


readFileContent(fileName, moduleCodes, moduleNames, numberOfStudents);

private static void readFileContent(String fileName, String[] moduleCodes, String[] moduleNames, int[] numberOfStudents) throws FileNotFoundException {

        // Create File Object 
        File file = new File(fileName);

        if (file.exists())
        {

            Scanner scan = new Scanner(file);
            int counter = 0;

            while(scan.hasNext())
            {


                String code = scan.next();
                String moduleName = scan.next();
                int totalPurchase = scan.nextInt();

                moduleCodes[counter] = code;
                moduleNames[counter] = moduleName;
                numberOfStudents[counter] = totalPurchase;

                counter++; 


            }

        }

    }

上記のコードは正しく動作しません。配列の要素を出力しようとすると。文字列配列の場合は null を返し、int 配列の場合は 0 を返します。これは、データを読み取るコードが機能していないことを示しています。

この時点でイライラしているので、提案やガイダンスは大歓迎です。

4

3 に答える 3

1

のみが印刷されるという事実はnull、ファイルが存在しないか空であることを示唆しています (正しく印刷した場合)。

すべてが正常であることを確認するために、いくつかのチェックを入れることをお勧めします。

if (!file.exists())
  System.out.println("The file " + fileName + " doesn't exist!");

if (file.exists())または、実際には上記をスキップして、コード内の行を取り出してFileNotFoundExceptionスローすることもできます。

もう 1 つの問題は、next空白 (デフォルト) で物事を分割することです。問題は、その 2 行目に空白があることです。

nextLine動作するはずです:

String code = scan.nextLine();
String moduleName = scan.nextLine();
int totalPurchase = Integer.parseInt(scan.nextLine());

または、区切り文字の変更も機能するはずです:(コードをそのまま使用)

scan.useDelimiter("\\r?\\n");
于 2013-04-18T15:29:10.110 に答える
0

あなたは行を読んでいるので、これを試してください:

while(scan.hasNextLine()){
    String code = scan.nextLine();
    String moduleName = scan.nextLine();
    int totalPurchase = Integer.pasreInt(scan.nextLine().trim());

    moduleCodes[counter] = code;
    moduleNames[counter] = moduleName;
    numberOfStudents[counter] = totalPurchase;
    counter++; 
}
于 2013-04-18T15:28:21.383 に答える
0
  String code = scan.nextLine();
  String moduleName = scan.nextLine();
  int totalPurchase = scan.nextInt();
  scan.nextLine()

これにより、読み取り後にスキャナが適切な位置に移動しますint

于 2013-04-18T15:24:49.117 に答える