1

最大 3 行を保存できるテキスト ファイルがあります (各行には時間 ##:## があります)。

テキスト ファイル全体が空の場合: タスク 1 を実行します。

そうでなければ、最初の行に時間があれば: タスク 2 を実行します

そうでなければ、1 行目と 2 行目が時間で埋められている場合: タスク 3 を実行します。

そうでなければ、3 行すべてに時刻がある場合: タスク 4 を実行

そうでなく、3 つのラインすべてに時間があるが、最初のラインの時間と 3 番目のラインの時間に 2 時間以上のギャップがある場合: タスク 5 を実行します。

最初の2つが分かりました。

if ((inputFile.readLine()) == null) {Keypad5 task1 = new Keypad5(); }

else if ((inputFile.readLine()) !=null) {Keypad6 task2 = new Keypad6();}

2行目と3行目はどう読めばいいの?2 行目の時刻が 12:54 で、3 行目の時刻が 3:55 の場合、これは 2 時間以上のギャップです。おそらく時間を差し引くことができます。

4

3 に答える 3

3

何をすべきかを決める前に、3 行すべてを読むことをお勧めします。これにより、2行目と3行目の「コピーと貼り付け」の読み取りが減ります。

このようなものは、あなたが求めているものかもしれません:

List<String> lines = new ArrayList<String>();

Scanner s = new Scanner(new File("filename.txt"));
while (s.hasNextLine())
    lines.add(s.nextLine());

switch (lines.size()) {
case 0: doTask1(); break;
case 1: doTask2(); break;
case 2: doTask3(); break;
case 3:
    if (gapBetween(lines.get(0), lines.get(2)) < 2)
        doTask4();
    else
        doTask5();
}
于 2011-03-04T18:42:33.090 に答える
0

BufferedReader に対する後続の readLine() 呼び出しは、常にファイルの次の行を読み取ります。異なる行を比較したい場合は、変数に保存して後で比較する必要があります。

于 2011-03-04T18:44:55.640 に答える
0

最初にすべてのテキスト行を Collection に読み込むことでこれを行います。これが 3 行だけになると確信している場合、メモリの問題は発生せず、多くのエラー処理を行う必要はありません。 .

ArrayList<String> lines = new ArrayList<String>();
String line = null;
while ((line = inputFile.readLine()) != null){
lines.add(line);
}

次に、バッファ内の前の行を上書きすることなく、いくつかの if ステートメントをかなり簡単に実行できます。(「inputFile」はBufferedReaderであると想定しています)

于 2011-03-04T18:46:51.160 に答える