利用责任链模式,在计算一个数的阶乘时如果溢出则跳到下一个类型去计算。
#问题1:结果出现0的情况
请输入计算的阶乘数:50
int:0
明明50的阶乘早就溢出了为啥没有调到下一个还等于0呢?
可以控制台输出计算过程中所有的结果看看
这是因为过程中有溢出后等于0的情况,所以在判断时也可以加上等于0的条件。
if(result<=0){//可能会等于0
nextHandle.calculate(num);
}
#问题2:明明上一个数还是溢出结果下一个数又显示没调到下一级了。
这是因为溢出后可能会出现往回返的情况,我们可以把判断放在循环里并在发生溢出时就跳出循环。
public class IntHandle implements Handle {
private Handle nextHandle;
@Override
public void calculate(Integer num) {
// TODO Auto-generated method stub
int result = 1;
for(int i=1;i<=num;i++){
result*=i;
System.out.println("int:"+result);
if(result<=0){//可能会等于0
nextHandle.calculate(num);
break;
}
}
}
@Override
public void setNextHanlde(Handle handle) {
// TODO Auto-generated method stub
nextHandle=handle;
}
}