3

おい。最近、助けを求めている私の投稿を見たことがあるかもしれませんが、以前は間違っていたので、最初からやり直して、基本から始めます。

次のようなテキストファイルを読み込もうとしています。

FTFFFTTFFTFT
3054 FTFFFTTFFTFT
4674FTFTFFTTTFTF
...など

私がする必要があるのは、最初の行を回答キーとして文字列に入れることです。

次に、学生証(最初の数字)で配列を作成する必要があります。次に、学生の回答を含む学生IDに並列な配列を作成する必要があります。

以下は私のコードですが、このように機能させる方法がよくわかりません。誰かが私を助けてくれるかどうか疑問に思っていました。

public static String[] getData() throws IOException {
      int[] studentID = new int[50];
      String[] studentAnswers = new String[50];
      int total = 0;

      String line = reader.readLine();
      strTkn = new StringTokenizer(line);
      String answerKey = strTkn.nextToken();

      while(line != null) {
        studentID[total] = Integer.parseInt(strTkn.nextToken());
        studentAnswers[total] = strTkn.nextToken();
        total++;
      }
    return studentAnswers;
    }

したがって、1日の終わりには、配列構造は次のようになります。

studentID [0] = 3054
studentID [1] =4674
...など

studentAnswers [0] = FTFFFTTFFTFT
studentAnswers [1] = FTFTFFTTTFTF

ありがとう :)

4

2 に答える 2

2

読み取り用にファイルを正しく開いており(リーダー変数がどのように初期化されているか、またはリーダーのタイプがわからないため)、ファイルの内容が(期待どおりに)整形式であると仮定すると、次のことを行う必要があります。以下をせよ:

  String line = reader.readLine();
  String answerKey = line;
  StringTokenizer tokens;
  while((line = reader.readLine()) != null) {
    tokens = new StringTokenizer(line);
    studentID[total] = Integer.parseInt(tokens.nextToken());
    studentAnswers[total] = tokens.nextToken();
    total++;
  }

もちろん、ランタイムエラー(ファイルの内容が正しくない場合)を回避するためにいくつかのチェックを追加するのが最善です。たとえば、Integer.parseInt()の周りのtry-catch句(NumberFormatExceptionをスローする可能性があります)。

編集:タイトルでStringTokenizerを使用したいことに気付いたので、コードを編集しました(splitメソッドをStringTokenizerに置き換えました)。

于 2010-02-01T00:16:51.000 に答える
2

あなたは考えたいかもしれません...

  • Scanner入力をトークン化するためのクラスの使用
  • 生の配列の代わりにコレクションタイプ(などArrayList)を使用する-配列には用途がありますが、柔軟性はあまりありません。ArrayList動的な長さ
  • 学生IDとその回答をカプセル化するクラスを作成する-これにより、情報がまとめられ、2つの配列の同期を維持する必要がなくなります。

Scanner input = new Scanner(new File("scan.txt"), "UTF-8");
List<AnswerRecord> test = new ArrayList<AnswerRecord>();
String answerKey = input.next();
while (input.hasNext()) {
  int id = input.nextInt();
  String answers = input.next();
  test.add(new AnswerRecord(id, answers));
}
于 2010-02-01T10:26:15.637 に答える