2016-04-15 2 views
0

Ниже приведен код, который должен вызывать исключение IllegalArgumentException, если заданное значение вне диапазона. Но вместо этого, если заданные числа в setTime() вне диапазона, он вернет соответствующее значение, когда объект был создан в основном методе вместо желаемого сообщения об ошибке! что является причинойIllegalArgumentException возвращает значение, указанное в объявлении объекта

вот код:

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

Ваш код не делает ничего, если значения вне диапазона. Он должен исключать исключение, но вы просто игнорируете значения, если они недействительны. –

+1

Является ли код волшебным образом предполагаемым, чтобы знать, что он должен бросить конкретное исключение, если оно не сработает с каким-либо условием 'if'? – John3136

+0

так что я должен добавить ошибку исключения! – zamzam

ответ

1

Вы сказали, что он должен бросок исключение. Таким образом, вы не должны catch это внутри метода. Удалите попробовать {...} поймать {..} вокруг если «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

благодаря этому исправлена ​​проблема – zamzam

0

Вы должны бросить исключение.

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

спасибо, я думал, что вы просто добавили одну ошибку исключения для всего метода – zamzam

+0

этот код делает то же самое, что и проблема – zamzam

+0

@zamzam: достаточно всего одного исключения для целого метода; но вам нужно выбросить ошибку, чтобы выполнить/уловить исключение. – Cjo

0

вам необходимо обновить свой код ручки за пределами диапазона значений

например:

if (hour > 0 && hour < 23) 
    this.hour = hour; 
else 
    throw new IllegalArgumentException(); 
Смежные вопросы