2012-01-16 16 views
-2

私はforループをネストしました。それはまあまあです。最初のif文だけをtrueとして読み込みます。それ以降はすべての可能な真の文章を無視します。ネストされたforループ - 最初の "if"ステートメントの読み取りのみ

for(int i = 0; i < inGroups.length; i++) 
{ 
    for(int g = 0; g < theGroups.length; g++) 
    { 
     if(inGroups[i].equals(theGroups[g])) 
     { 
      gLV.setItemChecked(g, true); 
     } 
    } 
} 
+4

しません。あなたは論理エラーがあります。デバッガでステップ実行するか、printステートメントを追加します。 –

+1

inGroupsがtheGroupsと一致していてもよろしいですか? – Max

+0

プロジェクトを最初にクリアします。 EclipseのAndroidプロジェクトは壊れている/同期が外れているようです。 – Voo

答えて

1

コードは正常です。 @HotLicksについて言及したように、デバッガを使用したり、printステートメントを追加して、何が起こっているかを知る必要があります。あなたのコードに関する一般的なコメントの

カップル:

  • あなたのGroupオブジェクトまたは何がそうでなければ、それは常にfalse implemented an equals methodになりましたあなたの配列であることを確認する必要があります。
  • setItemCheckedは複数の値を処理できますか? setを2回呼び出すと、前の値が上書きされますか?
  • あなたのコードは非常に非効率です(O(N^2))。あなたはO(N)である次のようなことをすることを検討することができます。配列が小さいのかどうかは関係ありません。この方法を使用する場合は、implement hashCode() and equals() methodsが必要です。

    Set<Group> inGroupsSet = new HashSet<Group>(); 
    // load inGroups into a set 
    for (Group group : inGroups) 
        inGroupsSet.add(group); 
    // look up each Group in theGroups in the set 
    for (int g = 0; g < theGroups.length; g++) 
        if (inGroupsSet.contains(theGroups[g])) 
         gLV.setItemChecked(g, true); 
    

何かがここにお役に立てば幸いです。

+0

私のデバッガは何のエラーも投げておらず、私のプリントアウトに何の助けも何も表示されていません。私はforループを使用してsetItemCheckedを呼び出すと、チェックされたすべての項目が正しく設定されます。 if文で追加するときは、最初の項目でのみ動作し、次のいずれの項目でも動作しません。あなたの提案されたアイディアのいくつかを試し、私が得たものを見ていきます。ありがとう! – DigitalKrony

+0

デバッガからのエラーのスローではありません。 if文にブレークポイントを設定し、何が起きているのかを理解するためにプログラムの実行をステップ実行することです。 – Gray

+0

ステッピングは問題のことについて私には洞察を与えませんでした。しかし、私はあなたのコードを提案して実装しました。それは私がforループを持っているのと同じように走った。しかし、配列を入れ替えたとき、リスト内の複数の項目をチェックしましたが、反復回数が間違っていたため間違った項目だけがチェックされました。この時点で私は失われています、私はカーソルから作成している配列に何か問題があると考えることができますか?私はそれを保つつもりです。私はそれが私が行方不明の嫌なほど単純なことに終わるだろうと確信しています。乾杯。 – DigitalKrony

関連する問題