问: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”值,则此方法将带来错误}
希望对您有所帮助,