Невозможно получить правильный логический вывод из метода (Java) - PullRequest
1 голос
/ 13 ноября 2011

Я написал логический метод, который можно вызывать для чтения информации из файла. Если генерируются определенные исключения, метод должен возвращать логическое значение «false». Если нет, он должен вернуть значение «истина». Однако метод всегда возвращает значение «истина», несмотря ни на что. Фактический читаемый файл имеет номер в первой строке (представляющий номер недели), а остальные строки содержат информацию о лечении для одного пациента для каждой строки. Мой код выглядит следующим образом:

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 Ответ

3 голосов
/ 13 ноября 2011

Я хотел бы рассмотреть это: вернуть переменную '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;
    }
...