繁体   English   中英

在重载的构造函数JAVA中将AM和PM与时间配合使用

[英]Using AM and PM with time in overloaded constructors, JAVA

好的,所以我一直在尝试使用重载的构造函数创建一个非常简单的时钟显示,在这里我使用void main string创建具有特定时间的4个不同对象。 似乎很难解释,但是在下面您可以看到我的主班和另一个班。

public class fancyTimeTest {

    public static void main(String[] args) {

        try {
        fancyTime ft1 = new fancyTime(10, 30, 25);
        displayTime("fancyTime 1", ft1);
        }
        catch (IllegalArgumentException e) {
            System.out.printf("%nError: %s%n", e.getMessage());
        }


        try {
        fancyTime ft2 = new fancyTime(13, 22);
        displayTime("fancyTime 2", ft2);
        }
        catch (IllegalArgumentException e) {
            System.out.printf("%nError: %s%n", e.getMessage());
        }


        try {
        fancyTime ft3 = new fancyTime(23, 5, 10);
        displayTime("fancyTime 3", ft3);
        }
        catch (IllegalArgumentException e) {
            System.out.printf("%nError: %s%n", e.getMessage());
        }


        try {
        fancyTime ft4 = new fancyTime(8, 30, 43);                   
        displayTime("fancyTime 4", ft4);
        }
        catch (IllegalArgumentException e) {
            System.out.printf("%nError: %s%n", e.getMessage());
        }   
    }



    public static void displayTime(String header, fancyTime t) {
        if (t.getFlag() == 1) {
            System.out.printf("%s%n   %s%n \n", header, t.toStandardString());
        }

        if (t.getFlag() == 2) {
            System.out.printf("%s%n   %s%n \n", header, t.toUniversalString());
        }

        if (t.getFlag() == 3) {
            System.out.printf("%s%n   %s%n \n", header, t.toUniversalShortString());
        }    
    }

}

如您所见,4个“ fancyTime”中的每个都有不同的参数。 现在在下面,您可以看到我如何尝试使用重载的构造函数以能够读取Main类中的不同参数。

问题是每次我运行此命令时,它都会返回“错误:只能是'AM'或'PM'

public class fancyTime {

    private int hour;
    private int minute;
    private int second;
    private String meridiem;
    private int flag;

    public fancyTime() {
        this(0);
    }

    public fancyTime(int hour) {
        this(hour, 0);
    }

    public fancyTime(int hour, int minute) {
        this(hour, minute, 0);
    }


    public fancyTime(int hour, int minute, int second) {
        this(hour, minute, second, " ");

    }

    public fancyTime(int hour, int minute, int second, String meridiem) {
        if (hour < 0 || hour >= 24)
            throw new IllegalArgumentException("Hour is not between 0-23");
        if (minute < 0 || minute >= 59)
            throw new IllegalArgumentException("Minute is not between 0-59");
        if (second < 0 || second >= 59)
            throw new IllegalArgumentException("Second is not between 0-59");
        if (!meridiem.equals("AM") || !meridiem.equals("PM"))
            throw new IllegalArgumentException("Can only be 'AM' or 'PM'");

    }


    public void setHour(int hour) {
        if (hour < 0 || hour >= 24)
            throw new IllegalArgumentException("Hour must be 0-23");

        this.hour = hour;
    }

    public void setMinute(int minute) {
        if (minute < 0 || minute >= 60)
            throw new IllegalArgumentException("Minute must be 0-59");

        this.minute = minute;
    }

    public void setSecond(int second) {
        if (second < 0 || second >= 60)
            throw new IllegalArgumentException("Second must be 0-59");

        this.second = second;
    }

    public int getHour() {
        return hour;
    }

    public int getMinute() {
        return minute;
    }

    public int getSecond() {
        return second;
    }

    public int getFlag() {
        return flag;
    }


    public String toStandardString() {
        return String.format("%d:%02d:%02d %s", ((hour ==0 || hour ==12) ? 12 : hour % 12), minute, second, (hour <12 ? "AM" : "PM"));
    }

    public String toUniversalString() {
        return String.format("%02d:%02d:%02d", this.hour, this.minute, this.second);
    }

    public String toUniversalShortString() {
        return String.format("%02d:%02d", this.hour, this.minute);
    }
}

任何帮助将不胜感激,请放轻松,因为我只是新手

无论meridiem值如何,您的if语句将始终引发异常。

DEMO

测试案例1

meridiem = "AM";

if (!meridiem.equals("AM") || !meridiem.equals("PM"))
if (!true || !false)
if (false || true)
if (true) --> throws exception

测试案例2

meridiem = "PM";

if (!meridiem.equals("AM") || !meridiem.equals("PM"))
if (!false || !true)
if (true || false)
if (true) --> throws exception

测试案例3

meridiem = "something else";

if (!meridiem.equals("AM") || !meridiem.equals("PM"))
if (!false || !false)
if (true || true)
if (true) --> throws exception

您应该改为:

if (!(meridiem.equals("AM") || meridiem.equals("PM")))
       throw new IllegalArgumentException("Can only be 'AM' or 'PM'");

DEMO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM