2016-04-15 20 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

你说应该例外。所以你不应该赶上它里面的方法。取下尝试{...}赶上{..}围绕如果

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