2016-03-27 24 views
3

変数aは、0,1または2にすることができます。値は、余分whileループ条件の数です。私はswitchcaseを使ってこれを行うことができますが、もっと良い方法があるのでしょうか?余分なwhileループ条件...条件に基づいて

switch (a) { 
    case 0: while (condition_1) { 
     // ... 
    } break; 
    case 1: while (condition_1 || condition_2) { 
     // ... 
    } break; 
    case 2: while (condition_1 || condition_2 || condition_3) { 
     // ... 
    } break; 
} 

Pythonでこの問題を解決するには、辞書を使用して、適切なインデックスに適切なラムダ式を保存することでした。しかし、私の条件は「最終的ではなく、効果的に最終的なもの」なので、Javaのラムダ式では使用できません。

ここでの目的は、while (true)またはwhile (false)のいずれかを取得することではありません。それはwhile (...something)で始まり、falseと評価されます。ループ内のTHENは、すべての条件を真に1つずつ変更します。しかし、すべての条件が成立するまで、ループを続けてください。

擬似コード(私はデモのために、それはいくつかの欠点を持って知っている):

a can be 0,1,2 

p = 5 
q = 7 
r = 10 
s = 14 

if a = 1 
while p != q -> p+=1 
if a = 2 
while p!= q || p!= r -> p+=1 

また、これは私が私に魚の種類の質問を与えるのではなく、魚のことを教えるです。

+0

あなたはブール値を返すヘルパーが必要です。 – HuStmpHrrr

+0

ダブルポストしないでくださいhttp://stackoverflow.com/questions/36025026/have-extra-while-loop-conditions-based-on-a-condition?lq=1 – MCMastery

+3

@MCMasteryそれはPythonです、これはjavaです、そしてOPはなぜそのアプローチ(と思われる)がJavaでは機能しないのかを説明しています –

答えて

0

Javaスイッチがフォールスルーをサポートしていることを思い出させます。 Javaでスイッチケースではなく、式の文ですので、あなたは、それを行うためにヘルパー関数が必要になります。

private boolean helper(a) { 
    boolean b = false; 
    switch (a) { 
     case 2: b = b || condition_3; 
     case 1: b = b || condition_2; 
     case 0: b = b || condition_1; 
    } 
    return b; 
} 

私は本当にあなたがヘルパー関数を置くことはできませんどのような場合を考えることはできません。それが本当なら、私はそれについて学びたいと思います。 (実際にはpythonの場合、答えはあなたに助け(ラムダ形式で)を使用することを示唆しています)

+0

'a'が500のようにはるかに大きい数ならどうなりますか? –

+0

あなたはいくつかの 'case n'sを書こうと思うことなしに500の異なる条件を書くのにあなたの時間を費やしますか? – HuStmpHrrr

+0

私は、手作業ですべてを入力するのではなく、配列のようなもので条件を計算するプログラムを持っていることを意味しました。 –

1

条件リストが定義されているとします。

boolean[] condition = new boolean[n]; 

a、あなたが確認したいのブール値の数であるので、ちょうどこの場合、新しい変数

boolean valid = false; 


//check all conditions up to a 
for (int i = 0; i < a; i++) { 
    if (condition[i]) { 
     valid = true; 
     break; 
    } 
} 

while (valid) { 
    //perform action and then run the checking valid code again 
} 

を作成し、あなたが望むものである、合計でa条件をチェックします。

+0

どのように配列を初期化しますか? – HuStmpHrrr

+0

OPはすでに条件ブール値を得ており、それらを持つ配列を作成すると仮定します。 –

+0

これは正しくありません。 3つの条件がある場合、最初のヒットが真実であれば、残りの部分を初期化するのはどうしてですか? opは何を求めているのだろうか。 – HuStmpHrrr

関連する問題