我有作业,这是我的任务:
创建一个具有以下内容的对象类:
最后期限不能在星期六或星期日-如果发生这种情况,则会抛出(IllegalArgumentException)异常,并显示有关日期不正确的消息(格式为dd.mm.yyyy)。在适当和不适当的期限内演示该方法。提示:使用getDayOfWeek方法显示星期几。
我有一个问题,我真的不明白如何正确使用getDayOfWeek方法,当然我尝试从这一方面进行编程,但是我的输出是:<form method="post">
{{ csrf_field() }} or @csrf
...
我已经尝试使用此方法,但我真的不明白它需要返回哪种数据类型
Deadline@2d554825
这是我的代码:
public DayOfWeek getDayOfWeek() {
// what should I return?
}
答案 0 :(得分:0)
首先,如果您想知道星期几的名称,请执行以下操作:
LocalDate a = LocalDate.parse("2017-02-03");
System.out.println(a.getDayOfWeek().name());
通过这种方式,您可以将星期中的给定日期与字符串进行比较,例如“ SATURDAY”或“ SUNDAY”。
第二,如果您想做
Deadline first = new Deadline(LocalDate.parse("2017-02-03"));
System.out.println(first);
您需要在Deadline类中重写@ToString。例如:
class Deadline {
...
@Override
public String toString() {
return this.deadline.toString();
}
}
答案 1 :(得分:0)
您需要的是适当的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)
而不是在此处编写相同的错误处理,但是如果您决定不这样做,则必须保留冗余代码。