2016-03-30 27 views
0

私は現在forループを書いており、38要素の2Dを通過しています。しかし、これらの要素の中にはnullがあり、forループで単純にスキップしてもらいたい(パズルでは私が解決しているため、関連する動きがないため)。クイック検索では、forループの冒頭にあるifステートメントの単純なcontinueステートメントで繰り返しをスキップできることが明らかになりました。しかし、私は複数の反復をスキップしたい、と私は書いたif文が動作していません。forループの特定の反復をスキップ

for (int i = 0; i < triplets.length; i++) { 
    if (i == 18 || 19 || 25 || 26 || 28 || 29 || 31 || 32) { 
     continue; 
    } 

は8つの個々if文を作るに代わるものはありますか私はそれで立ち往生していますか?

+3

このような条件を論理的に連鎖させることはできません、 '||'演算子は両側にブール値を渡す必要があります。例えば 'i == 18 || i == 19 || ... ' – azurefrog

+0

あなたは要素がnullだから、スキップする特定の動きを指定しようとするのではなく、要素がnullであることをテストできないのですか?他の選択肢については、 'if(i == 18 || i == 19 ...)'を実行することができます。私はリストにロードし、リスト内の存在をチェックするだろう。私が@Cootriが私が入力していたときに下に行ったのを見ると、... – KevinO

+2

なぜ私は簡単な質問をするためにdownvotedになっているのか分かりませんが、ちょっと、それはあなたのためのペナルティオーバーフローコミュニティです。単純な構文エラーだったようです。あなたの助けを借りてくれてありがとう@azurefrog –

答えて

5

条件を正しく指定していません。それはこのようなものでなければなりません。また

if (i == 18 || i == 19 || i == 25 || i == 26 || i == 28 || i == 29 || i == 31 || i == 32) { 
    continue; 
} 

、私の代わりにこのような何かをするためにあなたをお勧めします:

  1. HashSetを作成し、それに比較する値を置きます。

  2. HashSetiが含まれているかどうかを確認し、該当する場合はループを続けます。

    Set<Integer> set = new HashSet<>(); 
    set.add(18); 
    set.add(19); 
    set.add(25); 
    set.add(26); 
    set.add(28); 
    set.add(29); 
    set.add(31); 
    set.add(32); 
    
    if(set.contains(i)) { 
        continue; 
    } 
    
+0

あなたのコードで 'else'が冗長です – fge

+0

@fgeただそれを実現しました!ありがとう:) – user2004685

2

文は、私はそれで立ち往生していた場合、または8個人を作るための代替はありますか?

あなたはList除く作成し、現在のトリプレットが(コードがcontinue通話なく、より簡潔である)、それに存在しない場合、あなたのコードを実行することができます。

List<Integer> exclude = Arrays.asList(18, 19, 25, 26, 28, 29, 31, 32); 
for (int i = 0; i < triplets.length; i++) { 
    if (!exclude.contains(i)) { 
     ....//your code 
    } 
} 

リストを除外するが、代わりにO(N)(のO(1)検索の複雑さを持っているが、約5.5 times more memoryごとの消費HashSetArrayListを交換することをお勧め、ある大きい場合要素)

+1

なぜあなたは最初に '!'を持っていますか? – user7

+1

@ user7インデックスが除外リストにないときはいつでもブロックを実行したいからです。 – FredK

+0

しかし、以前はあなたの中に 'continue'があった – user7

関連する問題