-3

私はJavaプログラムを書いています。私は4つのブール変数を持っています。true/false のいずれかの値。そのフラグに応じて、4 つの異なる Web サービスを呼び出したいと考えています。

一度に、Web サービス呼び出しは 1 つだけになります。2 つ以上のフラグが true の場合は、スローする必要があります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 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 に答える
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 に答える
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 に答える