2016-04-15 3 views
0

Der folgende Code ist Teil eines Programms, das eine IllegalArgumentException auslösen soll, wenn der angegebene Wert außerhalb des gültigen Bereichs liegt. Wenn jedoch die angegebenen Zahlen in setTime() außerhalb des gültigen Bereichs liegen, wird der entsprechende Wert zurückgegeben, wenn das Objekt in der main-Methode anstelle der gewünschten Fehlermeldung erstellt wurde. was ist der GrundIllegalArgumentException gibt den in object declueration angegebenen Wert zurück

hier ist der Code:

public class MyTime { 

    private int hour = 0; 
    private int minute = 0; 
    private int second = 0; 

    public static void main (String [] args) { 
// when the value is out of range in setTime(), the value given bellow in t1 is returned 
     MyTime t1 = new MyTime (10,10,10); 
     t1.setTime(26, 23, 14); 
     System.out.println("toString(): " + t1); 
    } 

    public MyTime (int hour, int minute, int second) { 
     this.hour = hour; 
     this.minute = minute; 
     this.second = second; 
    } 
    public void setTime (int hour, int minute, int second) { 
     try { 
      if (hour > 0 && hour < 23) { 
       this.hour = hour; 
      } 

      if (minute > 0 && minute < 59) { 
       this.minute = minute; 
      } 

      if (second > 0 && second < 59) { 
       this.second = second; 
      }    

     } 
     catch (IllegalArgumentException exception) { 
      System.out.println("Invalid entry"); 
     } 
    } 
+3

Ihr Code tut nichts, wenn die Werte außerhalb des Bereichs liegen. Es muss die Ausnahme auslösen, aber Sie ignorieren nur die Werte, wenn sie ungültig sind. –

+1

Soll der Code auf magische Weise wissen, dass er eine bestimmte Ausnahme auslösen muss, wenn er eine "if" Bedingung nicht erfüllt? – John3136

+0

also sollte ich den Ausnahmefehler hinzufügen! – zamzam

Antwort

1

Sie gesagt sollte throw die Ausnahme. Also sollten Sie nicht fangen es innerhalb der Methode. Entfernen Sie die try {...} catch {..} um die wenn ‚s

public void setTime (int hour, int minute, int second) { 

    if (hour > 0 && hour < 23) { 
     this.hour = hour; 
    } else { 
     throw new IllegalArgumentException(); 
    } 

    if (minute > 0 && minute < 59) { 
     this.minute = minute; 
    } else { 
     throw new IllegalArgumentException(); 
    } 

    if (second > 0 && second < 59) { 
     this.second = second; 
    } else { 
     throw new IllegalArgumentException(); 
    }  

} 
+0

danke das Problem behoben – zamzam

0

Sie haben die Ausnahme zu werfen.

public void setTime (int hour, int minute, int second) { 
    try { 
     if (hour > 0 && hour < 23) { 
      this.hour = hour; 
     }else{ 
      throw new IllegalArgumentException("Invalid Hour Value"); 
     } 

     if (minute > 0 && minute < 59) { 
      this.minute = minute; 
     }else{ 
      throw new IllegalArgumentException("Invalid Minutes Value"); 
     } 

     if (second > 0 && second < 59) { 
      this.second = second; 
     }else{ 
      throw new IllegalArgumentException("Invalid Seconds Value"); 
     }    

    } 
    catch (IllegalArgumentException exception) { 
     System.out.println("Invalid entry"); 
    } 
} 
+0

danke Ich dachte, Sie fügen nur eine Ausnahme Fehler für die gesamte Methode – zamzam

+0

dieser Code denkt das gleiche Problem – zamzam

+0

@zamzam: nur eine Ausnahme für die gesamte Methode ist genug; aber Sie müssen den Fehler auslösen, um die Ausnahme auszuführen/abzufangen. – Cjo

0

müssen Sie Ihren Code Handle aktualisieren außerhalb des Bereichs

Werte

zB:

if (hour > 0 && hour < 23) 
    this.hour = hour; 
else 
    throw new IllegalArgumentException(); 
Verwandte Themen