67,513
社区成员
发帖
与我相关
我的任务
分享
int strategy = 0;
for (int i = 0; i < objects.size()-1; i++) {
strategy << 1;
if ("and".equals(objects.get(i).getPloy())) {
//
} else {
strategy += 1;
}
}
public boolean getState(R[] r, int strategy) {
int full = 1; //用于检验传入的策略整数是否溢出
for (int i=0; i<r.length-1; i++) { //运算符号数比操作数少1,所以是r.length-1
full &= (1<<i);
}
if (stracety > full) { //溢出的情况下,根据实际情况返回
return false; //这里以false返回为例
}
boolean state = r[0].isOk();
for (int i=1; i<r.length; i++) {
int bit = ((strategy >> r.length-i) & 1);
if (bit == 0) {
state = state && r[i].isOk();
} else {
state = state || r[i].isOk();
}
}
return state;
}
//调用
R[] r = {T1, T2, T3}; //3个接口实现,所以符号个数为2,即2位的二进制,最大策略为0x11=3
strategy = 0; //二进制为00
boolean state = getState(r, strategy); //返回 T1.isOk()&&T2.isOk()&&T3.isOk()
int strategy = 1; //二进制为01
boolean state = getState(r, strategy); //返回 T1.isOk()&&T2.isOk()||T3.isOk()
strategy = 2; //二进制为10
boolean state = getState(r, strategy); //返回 T1.isOk()||T2.isOk()&&T3.isOk()
strategy = 3; //二进制为11
boolean state = getState(r, strategy); //返回 T1.isOk()||T2.isOk()||T3.isOk()
strategy = 4; //二进制为100,超出符号个数,溢出
boolean state = getState(r, strategy); //返回 对应策略溢出时的返回值