好吧,我的任务是创建基本的警报实现接口。
这是我目前掌握的情况。
这是我的主要方法。
import java.util.Scanner;
import java.time.LocalTime;
public class Monday extends Weekday{
private String time;
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
Monday m = new Monday();
String alarmer;
System.out.print("Enter time for alarm in this format (HH:MM): " );
alarmer = reader.nextLine();
m.setAlarm(alarmer);
m.showAlarm();
}
@Override
public void setAlarm(String time) {
this.time = time;
LocalTime alarm = LocalTime.parse(time);
LocalTime now = LocalTime.now();
if (alarm.isBefore(now)) {
System.out.println("I'll wake you up later!");
}
else {
System.out.println("Alarm is set for tomorrow!");
}
}
@Override
public String showAlarm() {
return time;
}
}
下一个是接口
导入java.util.scanner;导入java.time.localtime;
interface Alarm {
void setAlarm(String time);
String showAlarm();
}
这里的问题是,即使输入的时间超过了当前时间,我总是得到“我稍后再叫醒你”。有什么办法可以避免同样的结果吗?
Enter time for alarm in this format (HH:MM): 05:30 I'll wake you up later!
不管输入是什么,它都只会执行并显示“我稍后再叫醒你!”当输入的时间超过当前时间时,应显示代码行“alarm is set for tomorrow”(为明天设置报警)
1条答案
按热度按时间mrfwxfqh1#
考虑到问题和评论,你似乎对没有日期背景的24小时时钟的逻辑感到困惑。
如果现在是下午5点?如果你把闹钟定在晚上10点,闹钟今天就会响。今天是一天中从现在到午夜之间的所有时刻。
如果现在是下午5点?如果你把闹钟定在下午3点,闹钟明天就会响。任何一天中某个时间早于当前时间的未来时刻都将发生在午夜之后,所以明天。
午夜过后意味着你将进入新的一天。所以一天中任何比现在早的时间都意味着明天。
下面是一些简单的示例代码。
模拟当前时间下午5点。
在一天中的不同时间值设置警报:22:00、15:00和05:30。
运行时:
一天中的某个时间,不是某个时刻
你的闹钟没有跟踪一个时刻,一个时间线上的特定点。这将涉及
Instant
,OffsetDateTime
,或ZonedDateTime
班级。您的闹钟正在跟踪一天中的某个时间,没有日期上下文,也没有时区上下文或与utc的偏移量。所以你的闹钟
LocalTime
班级。