-3

我正在编写java程序。我有四个布尔变量。其中的值可以是真/假。我想根据这些标志调用 4 个不同的 Web 服务。

一口气我将只有一个 Web 服务调用。如果任何两个或更多标志为真,那么我需要抛出Exception

请帮我写逻辑。

我的条件是

0 0 0 0 = 0 
0 0 0 1 = 0
0 0 1 0 = 0
0 0 1 1 = 1 
0 1 0 0 = 0 
0 1 0 1 = 1 
0 1 1 0 = 1 
0 1 1 1 = 1 
1 0 0 0 = 0 
1 0 0 1 = 1 
1 0 1 0 = 1 
1 0 1 1 = 1 
1 1 0 0 = 1 
1 1 0 1 = 1 
1 1 1 0 = 1 
1 1 1 1 = 1
4

4 回答 4

2

尝试:

boolean one;
boolean two;
boolean three;
boolean four;

//... some logic

if( (one? 1:0) + (two?1:0) + (three?1:0) + (four?1:0) > 1) {
    // Throw exception
} else {
    // call web service based on booleans
}
于 2013-07-28T10:13:25.003 回答
2

您可以使用以下功能

boolean flag1;
boolean flag2;
boolean flag3;
boolean flag4;

public static boolean validate(){
 int cnt = 0;
 if(flag1) 
    cnt++;
 if(flag2)
    cnt++;
 if(flag3) 
    cnt++;
 if(flag4)
    cnt++;

return (cnt>1)? true:false;
}
于 2013-07-28T10:14:48.573 回答
1

你基本上需要一个开发卡诺图方程来满足这个要求。这个要求的等式是 F(ABCD)=AB + CD + BD + BC +AD +AC

    public static void main(String[] args) {
        boolean cuSearch = false;
        boolean caseSearch = true;
        boolean cpSearch = true;
        boolean addressSearch = false;
        int e = ( ( toInt(cuSearch) * toInt(caseSearch) ) + (toInt(cpSearch) * toInt(addressSearch)) + (toInt(caseSearch) * toInt(addressSearch)) + (toInt(caseSearch) * toInt(cpSearch)) + (toInt(cuSearch) * toInt(addressSearch)) + (toInt(cuSearch) * toInt(cpSearch)) );
        boolean result=false;
        if(e == 1){
            result = true;
        }
        System.out.println(result);
    }

    static int toInt(boolean b) { 
        return b ? 1 : 0 ;
    }
于 2013-07-28T11:04:20.553 回答
1

我会使用一个位掩码(一个整数,其中整数的每一位都代表一个布尔值,然后有一堆枚举来代表合适的站点。这将使您将来更容易添加更多/更少的站点。代码将是有点像这样;

public enum Site {
    SITE_1(false, false, false, true), 
    SITE_2(false, false, true, false), 
    SITE_3(false, true, true false);
    private final int mask;
    Site(boolean a, boolean b, boolean c, boolean d){
       this.mask=(a?(1<<3):0)+(b?(1<<2):0)+(c?(1<<1):0)+(d?1:0);
    }
    int mask(){return mask;}
}
switch(users_flags)
{
    case SITE_1:
        //do Site 1 stuff
        break;
    case SITE_2:
        //do Site 2 stuff
        break;
    case SITE_3:
        //do Site 3 stuff
        break;
    default:
        throw Exception("Invalid Site");
}
于 2013-07-28T10:19:52.883 回答