使用界面 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.

一天中的时间,而不是片刻

您的闹钟没有跟踪时间轴上的某个时刻。这将涉及 InstantOffsetDateTimeZonedDateTime classes.

您的闹钟正在跟踪一天中的时间,没有日期上下文,也没有时区上下文或与 UTC 的偏移量。所以你的闹钟使用 LocalTime class.