Как правильно использовать метод getDayOfWeek - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть домашнее задание, и вот моя задача:

Создать класс объекта, который имеет:

  • частные поля экземпляра типа данных LocalDate, называемые deadline
  • конструктор, который создает экземпляр поля
  • метод get
  • метод set

Крайний срок не может быть в субботу или воскресенье - если это произойдет, (Исключение IllegalArgumentException) с сообщением о неподходящей дате (в формате dd.mm.yyyy).Продемонстрируйте метод, используя подходящие и неподходящие сроки.Подсказка: используйте метод getDayOfWeek, чтобы показать день недели.

У меня проблема, я действительно не понимаю, как правильно использовать метод getDayOfWeek, и, конечно, я попытался выполнить программу с этой стороны, но мой вывод:Deadline@2d554825

Я уже пытался использовать этот метод, но я действительно не понимаю, какой тип данных ему нужно вернуть

public DayOfWeek getDayOfWeek() {
    // what should I return?
}

Вот мой код:

import java.time.DayOfWeek;
import java.time.LocalDate;

public class Deadline {

    private LocalDate deadline;

    public Deadline(LocalDate DeadLine) {
        this.deadline = DeadLine;
    }

    public LocalDate getDeadline() {
        return deadline;
    }

    public void setDeadline(LocalDate deadline) {
        this.deadline = deadline;
    }

    public static void main(String[] args){
        Deadline first = new Deadline(LocalDate.parse("2017-02-03"));
        System.out.println(first);
        }
}

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вам нужен правильный toString() метод и локализованное название дня недели.

Этого можно добиться с помощью метода getDisplayName(TextStyle, Locale), который я покажу в приведенном ниже коде.

Есть еще одна вещь, которая подходит для чтения вашего задания:

Крайний срок не может быть в субботу или воскресенье - если это произойдет, исключение (IllegalArgumentException) с сообщением о неподходящей дате (в формате dd.mm.yyyy).

==> Не выдается IllegalArgumentException, в вашем коде даже нет проверки недействительных дней недели. Exception волшебным образом не появится, вы должны его реализовать.

Вот пример решения:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;

public class Deadline {

    private LocalDate deadline;

    public Deadline(LocalDate deadLine) {
        // check if the given date is a Saturday or Sunday and throw the desired Exception
        if (deadLine.getDayOfWeek() == DayOfWeek.SATURDAY 
                || deadLine.getDayOfWeek() == DayOfWeek.SUNDAY) {
            throw new IllegalArgumentException("The deadline to be set is not valid ("
                    + deadLine.getDayOfWeek()
                            .getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault())
                    + ", "
                    + deadLine.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
                    + "). Please provide a deadline which is a weekday.");
        } else {
            // otherwise just set the deadline
            this.deadline = deadLine;
        }
    }

    public LocalDate getDeadline() {
        return deadline;
    }

    public void setDeadline(LocalDate deadline) {
        if (deadline.getDayOfWeek() == DayOfWeek.SATURDAY 
                || deadline.getDayOfWeek() == DayOfWeek.SUNDAY) {
            throw new IllegalArgumentException("The deadline to be set is not valid ("
                    + deadline.getDayOfWeek()
                            .getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault())
                    + ", "
                    + deadline.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
                    + "). Please provide a deadline which is a weekday.");
        } else {
            this.deadline = deadline;
        }
    }

    @Override
    public String toString() {
        return deadline.getDayOfWeek()
                    .getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault()) 
                + ", "
                + deadline.format(DateTimeFormatter.ISO_LOCAL_DATE);
    }

    public static void main(String[] args) {
        // this is now a Saturday, which will throw the IllegalArgumentException
        Deadline first = new Deadline(LocalDate.parse("2017-02-04"));
        System.out.println(first.toString());
    }
}

Обратите внимание, что вам не обязательно использовать локализованное отображаемое имя enum DayOfWeek, но это может быть полезно. Вы также можете просто вызвать setDeadline(deadline) в параметризованном конструкторе вместо того, чтобы писать там ту же обработку ошибок, но если вы решите не делать этого, вам придется сохранить избыточный код.

0 голосов
/ 23 апреля 2019

Прежде всего, если вы хотите узнать название дня недели, сделайте это так:

LocalDate a = LocalDate.parse("2017-02-03");
System.out.println(a.getDayOfWeek().name());

Таким образом, вы можете сравнить данный день недели со строкой, такой как «СУББОТА» или «Воскресенье».

Во-вторых, если вы хотите сделать

Deadline first = new Deadline(LocalDate.parse("2017-02-03"));
System.out.println(first);

Вам нужно переопределить @ToString в вашем классе Deadline. Например:

class Deadline {

...

  @Override
  public String toString() {
      return this.deadline.toString();
  }
}
...