メソッド(Java)から適切な論理出力を取得できません

私は、ファイルから情報を読み出すために呼び出されるブール値のメソッドを書いています。特定の例外がスローされた場合、メソッドはブール値 "false"を返す必要があります。そうでなければ、値 "true"を返すべきです。ただし、このメソッドは何があっても常に値「true」を返します。実際に読み取られるファイルには、最初の行(週番号を表す)に数字があり、残りの行は、各行の1人の患者の治療情報で構成されています。私のコードは次のとおりです:

public boolean readTreatmentsFromFile(String filename) {
  boolean value = true;
  try {
    FileReader textFileReader = new FileReader(filename);
    BufferedReader textReader = new BufferedReader(textFileReader);

    System.out.println("READING TREATMENTS FROM FILE: " + filename);

    int week = Integer.parseInt(textReader.readLine());

    if (week != weekNumber) {
      throw new ArithmeticException(); 
    }

    String post = textReader.readLine();

    while(post != null) {
      addPost(post);
      if (!addPost(post))
        value = false;
      post = textReader.readLine();
    }
    textReader.close();
  }
  catch (ArithmeticException exception) {
    System.out.println("Invalid week number in the file: " + filename);
    value = false;
  }
  catch (FileNotFoundException exception) {
    System.out.print("The file cannot be located");
    value = false;
  }
  catch (IOException exception) {
    System.out.print("Cannot read the file:" + filename);
    value = false;
  }

  return value;
}

どのように私はそれが私に適切なブール結果を与えるためにコードを変更する必要がありますかに関するすべての情報は非常に感謝されます!

1
'特定の例外がスローされた場合、メソッドはブール値「false」を返す必要があります。' より良い品質の情報を得るには、メソッド内で例外を捕捉しないでください。 System.out.print( "ファイルを読むことができません:" + filename); 1) System.err を使用してエラー情報を表示します2) code> exception.printStackTrace(); は型を短くするだけでなく、実行時にもっと情報を提供します。
追加された 著者 Andrew Thompson,
例外がスローされていますか?
追加された 著者 Dave Newton,
メソッドを2回呼び出すか、おそらく addPost()の中からメッセージを2回印刷しますか?
追加された 著者 Dave Newton,
実際には、出力を見るようになったので、スローされる例外は実際にはwhileループで使用するaddPostメソッドからのものです。私のコードをもっと見てみると、私はこれを理解できるかどうかを見てみましょう。
追加された 著者 Kristian,
こんにちは。私は今、addPost(配列にポストを追加するメソッドであり、ブール値も返すメソッド)によってExceptionがスローされるという事実を説明しようとしました。さて、私は適切なブール値の出力を取得します。ただし、何らかの理由で、このメソッドに関連付けられているExceptionメッセージが2回出力されます。これを引き起こす可能性のあるアイデアは何ですか?
追加された 著者 Kristian,
Dave:チップをありがとう。 addPostメソッドに何か問題があるとは思わない。例外はif(!addPost(post))の値がfalseの場合に限り2回だけ出力されます。これをコードから削除すると、例外は一度だけ印刷されます。
追加された 著者 Kristian,
Andrew:チップをありがとう。残念ながら、私はまだsystem.errについて学んでいません。しかし、私はこれを将来確実に考えていきます。
追加された 著者 Kristian,
まあ、addPost(post)を削除すれば、すべてがスムーズに実行されることが分かりました。したがって、whileループでは、if(!addPost(post))ですぐに開始します。だから今は大丈夫だと思います。私は本当にあなたの助けに感謝します!
追加された 著者 Kristian,

1 答え

私はこれを考慮します:変数 'result'を返します。デフォルトはfalseです。成功した場合にのみtrueに設定します。以下を参照してください(私はコード自体をデバッグしていません)。

public boolean readTreatmentsFromFile(String filename) {
    boolean result = false;//pessimistic default

        try {
            FileReader textFileReader = new FileReader(filename);
            BufferedReader textReader = new BufferedReader(textFileReader);

            System.out.println("READING TREATMENTS FROM FILE: " + filename);

            int week = Integer.parseInt(textReader.readLine());

            if (week != weekNumber) {
                throw new ArithmeticException(); 
            }

            String post = textReader.readLine();

            while(post != null) {
                addPost(post);
                post = textReader.readLine();
            }
            textReader.close();
            result = true; //SUCCESS!
        }
        catch (ArithmeticException exception) {
            System.out.println("Invalid week number in the file: " + filename);
        }
        catch (FileNotFoundException exception) {
            System.out.print("The file cannot be located");
        }
        catch (IOException exception) {
            System.out.print("Cannot read the file:" + filename);
        }

        return result;
    }
3
追加された
どうもありがとう!これは、コードを少し「クリーナー」にします:)
追加された 著者 Kristian,