2017-07-05 3 views
0

整数をArraylistと比較する必要があり、整数の数がarraylistの場合はfalseを返します。整数がarraylistにないなら、私は真を受け取る。Androidで2つの整数を比較すると正しく動作しません

私はBBDDでいくつかの質問があるクイズゲームを作っているので、同じ質問を2回表示することはできません。また、この質問はE、I、Aという3つのカテゴリーに分かれています。私は5つのE質問、次に5質問、5質問を表示する必要があります。

私は質問を繰り返すことなく、また各カテゴリの5つを表示する必要があります。私はこの方法をとっていますが、なぜそれがいくつかの質問を繰り返すのか分かりません。

カテゴリの質問だけが正しく動作します。私は常に5つのEの質問、次に私は5つの質問と少なくとも5つの質問があります。

ArrayListの上にある場合は質問を私に言った方法:

private boolean checkRandom() 
{ 
    for(int i = 0; i < listRandom.size(); i++) 
    { 
     if(questionPosition == listRandom.get(i)) 
     { 
      return false; 
     } 
    } 

    return true; 
} 

私も「対等」としてみてください、私は同じ結果を持っています。

質問が適切なカテゴリにあり、前に示したされていないかどうかを確認する方法:だから

private void loadPhase() { 

    if (numQuestion < 15) 
    { 
     r = new Random(); 
     questionPosition = r.nextInt(listQuestions.size()); 

     if(numQuestion < 5) 
     { 
      while(!listPhase.get(questionPosition).equals("E") && (!listPhase.get(questionPosition).equals("E")|| !checkRandom())) 
      { 
       r = new Random(); 
       questionPosition = r.nextInt(listQuestions.size()); 
      } 
     } 
     else if(numQuestion > 4 && numQuestion < 10) 
     { 
      while(!listPhase.get(questionPosition).equals("I") && (!listPhase.get(questionPosition).equals("I")|| !checkRandom())) 
      { 
       r = new Random(); 
       questionPosition = r.nextInt(listQuestions.size()); 
      } 
     } 
     else if(numQuestion > 9) 
     { 
      while(!listPhase.get(questionPosition).equals("A") && (!listPhase.get(questionPosition).equals("A")|| !checkRandom())) 
      { 
       r = new Random(); 
       questionPosition = r.nextInt(listQuestions.size()); 
      } 
     } 

     listRandom.add(questionPosition); 

     header4questions.setText(listQuestions.get(questionPosition)); 

     answer1.setText(listAnswers.get(questionPosition * 4)); 
     answer2.setText(listAnswers.get((questionPosition * 4) + 1)); 
     answer3.setText(listAnswers.get((questionPosition * 4) + 2)); 
     answer4.setText(listAnswers.get((questionPosition * 4) + 3)); 

     numQuestion++; 
    } 
    else { 
     Toast.makeText(getApplicationContext(), "You have finished the quiz!", Toast.LENGTH_SHORT).show(); 

     uploadPoints(); 
    } 
} 

は、私が持っていることは正しいカテゴリ上のすべてのご質問ですが、それは質問を繰り返し、Iなぜか分からない。

誰でも手伝ってもらえますか?

ありがとうございます!

+2

エラーを見つけるには、このコードを本当にデバッグする必要があります。 –

+0

'n'個の質問をランダムに' List'から取り除くには、 'Collections.shuffle'を使ってリストをシャッフルし、最初の' n'個のアイテムを取り出します。 –

+0

@DawoodibnKareem get(iny)とget(object)とは何が違うのですか?それは私のエラーですか? – Imrik

答えて

0

private boolean checkRandom() 
{ 
    for(int i = 0; i < listRandom.size(); i++) 
    { 
     if(questionPosition == listRandom.get(i)) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+0

私はお試しください。待つ! :) – Imrik

+0

いいえ、それは動作しません、それでも質問を繰り返します。 – Imrik

+0

問題のように:整数の数がarraylistにある場合、私はfalse_を受け取るので、それは今の通りです! –

0

以下のようにあなたのリターンを交換したが変換ArrayList効果的に使用すると、挿入順序を保持する必要がある場合、私はむしろ、あなたがこのバリアントを使用することをお勧めしたい、重複を削除HashSet

list is some List of Strings 
 
Set <String> s = new LinkedHashSet < > (list);

次に、Listを参照して、変換コンストラクタを再度使用することができます。

回答参照:ユーザーが回答https://stackoverflow.com/a/204004/8252521

https://stackoverflow.com/users/27565/abahgat

+0

私は重複していない、私は意味...私はArrayList質問がありますが、ArrayListには重複がありません。 – Imrik

0

私はそれを解決!私はこのようなwhile条件を変更する必要があります:

while(!listPhase.get(questionPosition).equals("E") || (listPhase.get(questionPosition).equals("E") && !checkRandom())) 
関連する問題