2017-03-17 69 views
0

好吧,我一直在尝试使用重载构造函数创建一个非常简单的时钟显示,其中我使用void main字符串创建4个不同的对象,每个对象都有特定的时间。这似乎很难解释,但在下面你可以看到我的主类和另一个类。在重载的构造函数中使用AM和PM时,JAVA

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’或

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); 
    } 
} 

任何帮助会如此赞赏,并请去容易,因为我是‘PM’只有新

回答

0

if语句总是抛出异常,无论meridiem价值。

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