TEL:400-8793-956
当前位置:程序、服务器

确保在更改mBarsCount字段之前引发异常

提问者: 近期获赞: 浏览人数: 发布时间:2021-03-02 12:48:28

 问:public void drive(int laps){//为清晰起见,省略了其他驾驶代码

 
mBarsCount-=圈;
if(mBarsCount < = -1){
 throw new IllegalArgumentException(“剩余电量不足”);
}
 }
 GoKart.java
公共 类 GoKart  { 
public static final int MAX_BARS = 8 ; 私有字符串mColor ; 私人int mBarsCount ; 公共GoKart (字符串颜色){ mColor = color ; mBarsCount = 0 ; } public String getColor (){ return mColor ; } public void drive (){        
 
    驱动器(1 ); 
} public void drive (int laps ){ //为了清晰起见,省略了其他驱动代码mBarsCount- = laps ; 如果(mBarsCount <=- 1 ){抛出新的IllegalArgumentException (“剩余电量不足” ); } } public void charge (){ while (!isFullyCharged ()){ mBarsCount ++; } }
 
 
答:两件事情:
 
我们的if语句应该只检查mBarsCount的值是否大于“ laps”值(作为构造函数传递的值)。如果我们的mBarsCount小于我们传入的值,那么我们就不能从中减去,因为它会带来我们不想要的负数。发生这种情况时,我们要抛出异常。减法也应该在我们检查if语句之后发生。因此,以视觉格式:
 
 Answer.java
  public  void  drive (int  laps ) { 
//为清楚起见,省略了其他驱动代码,如果(mBarsCount < laps ){ //检查mBarsCount是否小于“ laps”,则抛出新的IllegalArgumentException (“剩余电量不足” )//如果为true,则错误} mBarsCount- = laps ; //否则,和平地减去期望值}    
 
我还发现下面的方法也可以工作,但是上面的解决方案更合乎逻辑,因为我们在mBarsCount中的值为1,但我们传入的参数为5。它将通过if语句,然后返回a错误,因为我们无法从1减去5。
 
我在下面添加了一些评论
 
 Alternative.java
  public  void  drive (int  laps ) { 
//为了清楚起见,省略了其他驱动代码if (mBarsCount == 0 ){ //检查mBarsCount中是否有任何值抛出新的IllegalArgumentException (“剩余电量不足” ); //如果里面没有值,则抛出异常} mBarsCount- = laps ; //如果确实有一个值,则减去传入的值。但是如上所述,如果我们的“ lap”值大于“ mBarsCount”值,则此方法将带来错误}    
 
希望对您有所帮助,
上一篇: 在JavaFX中将选定的图像文件设置为Imageview
下一篇: 无法同步Gradle项目“有趣的事实”-无法找到Build Tools版本19.1.0