2

所以我有一个 if 语句,如下所示:

List<Integer> portsInUse = new ArrayList<Integer>();
. . .
if(portsInUse.contains((Integer) newPort1) 
        || portsInUse.contains((Integer) newPort2){

    fail(_____, "This port is already in use.");
}

newPort1newPort2通过从 HttpServletRequest 中挖掘它们来分配。 fail(String parameter, String message)是一种内部方法,用于提醒用户出现问题。

我想做的是能够判断哪个条件导致 if 语句触发,然后相应地设置失败消息。我可以这样做,还是我必须做这样的事情:

List<Integer> portsInUse = new ArrayList<Integer>();
. . .
boolean port1 = portsInUse.contains((Integer) newPort1);
boolean port2 = portsInUse.contains((Integer) newPort2);
if(port1 || port2){
    if(port1)
        fail("newPort1", "This port is already in use.");
    else
        fail("newPort2", "This port is already in use.");
}

或者,第三种选择,我应该像这样分解条件:

List<Integer> portsInUse = new ArrayList<Integer>();
. . .
if(portsInUse.contains((Integer) newPort1) {
    fail("newPort1", "This port is already in use.");
}
if(portsInUse.contains((Integer) newPort2) {
    fail("newPort2", "This port is already in use.");
}

我确定我把事情复杂化了,但提前谢谢你。

4

4 回答 4

2

第四种选择...

List<Integer> portsInUse = new ArrayList<Integer>();
. . .
if(portsInUse.contains((Integer) newPort1) {
    fail("newPort1", "This port is already in use.");
}
else if(portsInUse.contains((Integer) newPort2) {
    fail("newPort2", "This port is already in use.");
}else{
    //No ports in use
}

第五个选项...

List<Integer> portsInUse = new ArrayList<Integer>();
. . .
if(portsInUse.contains((Integer) newPort1) {
    if(portsInUse.contains((Integer) newPort2) {
        //both ports in use
    }else{
        //port 1 in use
    }
}
else if(portsInUse.contains((Integer) newPort2) {
    //Port 2 in use
}else{
    //No ports in use
}
于 2012-08-14T14:57:48.097 回答
0

由于您需要确定正在使用哪个特定端口,因此第三个选项会更理想。

于 2012-08-14T14:58:16.130 回答
0

我认为您的第三个选项是最好的,因为您避免了 option2 的额外条件if(port1 || port2)

于 2012-08-14T14:58:38.097 回答
0
List<Integer> portsInUse = new ArrayList<Integer>();
. . .
List<Integer> portsToCheck = new ArrayList<Integer>();

portsToCheck.add(newPort1);
portsToCheck.add(newPort2);
...    

for (Integer port: portsToCheck){
    if (portsInUse.contains(port)) {
        fail(port+"", "This port is already in use.");  
    }
}
于 2012-08-14T15:08:28.037 回答