2011-11-12 2 views
1

파일에서 정보를 읽으려는 부울 메소드를 작성했습니다. 특정 예외가 발생하면 메서드는 부울 값 "false"를 반환해야합니다. 그렇지 않으면 "true"값을 반환해야합니다. 그러나이 메서드는 무엇이든 관계없이 항상 "true"값을 반환합니다. 읽히는 실제 파일은 첫 번째 줄 (주 번호를 나타내는)에 번호가 있고, 나머지 줄은 각 줄에 대해 한 환자의 치료 정보로 구성됩니다. 다음과 같이 내 코드는 다음과 같습니다 메소드 (Java)에서 적절한 부울 출력을 가져올 수 없습니다.

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; 
} 

이가 나에게 적절한 부울 결과를 제공 할 수 나는 순서로 코드를 변경하는 방법에 관한 모든 정보가 크게

을 이해할 수있을 것이다!

+0

예외가 발생 했습니까? –

+0

사실 출력을 살펴 보았으므로 throw되는 예외는 실제로 while 루프에서 사용하는 addPost 메서드에서 발생합니다. 내 코드를 더 자세히 살펴보고 내가 알아낼 수 있는지 알아 보자. – Kristian

+0

안녕하세요. 이제 addPost (배열에 게시물을 추가하고 또한 부울 값을 반환하는 메서드) 메서드에 의해 Exception이 throw 될 수도 있다는 사실을 설명하려고했습니다. 자, 나는 적절한 부울 출력을 얻는다. 그러나 어떤 이유로 프로그램에서이 메서드와 관련된 Exception 메시지를 두 번 인쇄합니다. 무슨 일이 일어날 지에 대한 어떤 생각? – Kristian

답변

3

나는 이것을 고려할 것이다 : '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; 
    } 
+0

고마워요! 이것은 코드를 조금 더 "깨끗하게"만든다. :) – Kristian

관련 문제