2017-03-17 5 views
0

Okです。オーバーロードされたコンストラクタを使用して非常に単純な時計表示を作成しようとしています。説明するのは難しいようですが、あなたの下で私のメインクラスと別のクラスを見ることができます。オーバーロードされたコンストラクタで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にはそれぞれ異なる引数があります。ここでは、メインクラスのさまざまな引数を読み取るために、オーバーロードされたコンストラクタを使用する方法を確認できます。

問題は、私はこれを実行するたびに、それは「エラーを返しますのみ 『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); 
    } 
} 

すべてのヘルプはとても感謝して、私は唯一の

新しいですと簡単に移動してくださいされるだろう

答えて

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

関連する問題