基于java接口的简易报警系统

wf82jlnq  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(367)

好吧,我的任务是创建基本的警报实现接口。
这是我目前掌握的情况。
这是我的主要方法。

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”(为明天设置报警)

mrfwxfqh

mrfwxfqh1#

考虑到问题和评论,你似乎对没有日期背景的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 班级。
您的闹钟正在跟踪一天中的某个时间,没有日期上下文,也没有时区上下文或与utc的偏移量。所以你的闹钟 LocalTime 班级。

相关问题