[英]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
语句将始终引发异常。
测试案例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'");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.