使用界面 Java 的简单报警系统
Simple Alarm System using Interface Java
好的,我的任务是创建基本的警报实现界面。
这是我目前所知道的。
这是我的主要方法。
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”
鉴于问题和评论,您似乎对没有日期上下文的 24 小时制逻辑感到困惑。
- 如果现在是下午 5 点,而您将闹钟设置为晚上 10 点,则闹钟将在今天响起。所有时间在当前时间和午夜之间的时刻都将是今天。
- 如果现在是下午 5 点,而您将闹钟设置为下午 3 点,则闹钟将在明天响起。任何时间早于当前时间的未来时刻都将发生在午夜之后,所以明天。
过了午夜意味着您将进入新的一天。所以比现在早的任何时间都意味着明天。
这是一些简单的示例代码。
模拟当前时间下午 5 点。
// ----------| now = 17:00 |------------------------------
LocalTime now = LocalTime.of( 17 , 0 );
System.out.println( "now = " + now );
在不同的时间值设置闹钟:22:00、15:00 和 05:30。
// ----------| alarm 22:00 |------------------------------
LocalTime tenPM = LocalTime.parse( "22:00" );
System.out.println( "" );
System.out.println( "tenPM = " + tenPM );
if ( tenPM.isBefore( now ) )
{
System.out.println( "I'll wake you up tomorrow." );
} else
{
System.out.println( "Alarm is set for today." );
}
// ----------| alarm 15:00 |------------------------------
LocalTime threePM = LocalTime.parse( "15:00" );
System.out.println( "" );
System.out.println( "threePM = " + threePM );
if ( threePM.isBefore( now ) )
{
System.out.println( "I'll wake you up tomorrow." );
} else
{
System.out.println( "Alarm is set for today." );
}
// ----------| alarm 05:30 |------------------------------
LocalTime fiveThirtyInMorning = LocalTime.parse( "05:30" );
System.out.println( "" );
System.out.println( "fiveThirtyInMorning = " + fiveThirtyInMorning );
if ( threePM.isBefore( now ) )
{
System.out.println( "I'll wake you up tomorrow." );
} else
{
System.out.println( "Alarm is set for today." );
}
当运行:
now = 17:00
tenPM = 22:00
Alarm is set for today.
threePM = 15:00
I'll wake you up tomorrow.
fiveThirtyInMorning = 05:30
I'll wake you up tomorrow.
一天中的时间,而不是片刻
您的闹钟没有跟踪时间轴上的某个时刻。这将涉及 Instant
、OffsetDateTime
或 ZonedDateTime
classes.
您的闹钟正在跟踪一天中的时间,没有日期上下文,也没有时区上下文或与 UTC 的偏移量。所以你的闹钟使用 LocalTime
class.
好的,我的任务是创建基本的警报实现界面。
这是我目前所知道的。
这是我的主要方法。
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”
鉴于问题和评论,您似乎对没有日期上下文的 24 小时制逻辑感到困惑。
- 如果现在是下午 5 点,而您将闹钟设置为晚上 10 点,则闹钟将在今天响起。所有时间在当前时间和午夜之间的时刻都将是今天。
- 如果现在是下午 5 点,而您将闹钟设置为下午 3 点,则闹钟将在明天响起。任何时间早于当前时间的未来时刻都将发生在午夜之后,所以明天。
过了午夜意味着您将进入新的一天。所以比现在早的任何时间都意味着明天。
这是一些简单的示例代码。
模拟当前时间下午 5 点。
// ----------| now = 17:00 |------------------------------
LocalTime now = LocalTime.of( 17 , 0 );
System.out.println( "now = " + now );
在不同的时间值设置闹钟:22:00、15:00 和 05:30。
// ----------| alarm 22:00 |------------------------------
LocalTime tenPM = LocalTime.parse( "22:00" );
System.out.println( "" );
System.out.println( "tenPM = " + tenPM );
if ( tenPM.isBefore( now ) )
{
System.out.println( "I'll wake you up tomorrow." );
} else
{
System.out.println( "Alarm is set for today." );
}
// ----------| alarm 15:00 |------------------------------
LocalTime threePM = LocalTime.parse( "15:00" );
System.out.println( "" );
System.out.println( "threePM = " + threePM );
if ( threePM.isBefore( now ) )
{
System.out.println( "I'll wake you up tomorrow." );
} else
{
System.out.println( "Alarm is set for today." );
}
// ----------| alarm 05:30 |------------------------------
LocalTime fiveThirtyInMorning = LocalTime.parse( "05:30" );
System.out.println( "" );
System.out.println( "fiveThirtyInMorning = " + fiveThirtyInMorning );
if ( threePM.isBefore( now ) )
{
System.out.println( "I'll wake you up tomorrow." );
} else
{
System.out.println( "Alarm is set for today." );
}
当运行:
now = 17:00
tenPM = 22:00
Alarm is set for today.
threePM = 15:00
I'll wake you up tomorrow.
fiveThirtyInMorning = 05:30
I'll wake you up tomorrow.
一天中的时间,而不是片刻
您的闹钟没有跟踪时间轴上的某个时刻。这将涉及 Instant
、OffsetDateTime
或 ZonedDateTime
classes.
您的闹钟正在跟踪一天中的时间,没有日期上下文,也没有时区上下文或与 UTC 的偏移量。所以你的闹钟使用 LocalTime
class.