-1

オブジェクトの配列を持つ配列リストがあります。オブジェクトには 2 つの値があります。1 つは質問で、もう 1 つは回答です。n 個の質問に対して同じ答えが出る可能性があります。つまり、回答レベルで重複があります。配列リストから、答えがまったく異なる 5 つのオブジェクトを描画したいと考えています。

いくつかのテクニックを教えてください。

ArrayList<ToughQuiz> animalQuizCollection;

    animalQuizCollection  = new ArrayList<ToughQuiz>(); 
    for(int i=0; i<animalQuestionCount;i++){  
        toughQuiz =  new ToughQuiz(animalQuestion[i], animalAnswer[i]);  
        animalQuizCollection.add(toughQuiz);     
    }  
4

6 に答える 6

0

ループを作成して、答えが ArrayList にないことを確認します

ArrayList<ToughQuiz> animalQuizCollection;
boolean find=false;
    animalQuizCollection  = new ArrayList<ToughQuiz>(); 
    for(int i=0; i<animalQuestionCount;i++){
        for(int j=0; j<animalQuizCollection ; j++) {
             if(animalAnswer[i].equals( animalQuizCollection.get(j).getAnswer() ) {
                   find = true;
                   break;
             }
             else
                  find = false;
        }
        if(!find) {   
            toughQuiz =  new ToughQuiz(animalQuestion[i], animalAnswer[i]);
            animalQuizCollection.add(toughQuiz);  
        }   
    } 
于 2013-06-14T15:04:25.310 に答える
0

同じ答えに対して同じ値を返すequalsメソッドを実装します。つまり、答えを使用して計算します。ToughQuiz

@Override
public boolean equals(Object o) {
    if (o == null || !(o instanceof ToughQuiz))
        return false;

    ToughQuiz other= (ToughQuiz) o;
    if (this.answer.equals(other.answer))
        return true;

    return false;
}

次に、次のような 5 つのクイズが出されます。

Random random= new Random();
List<ToughQuiz> result= new ArrayList<>();
for (int i=0; i<5; i++) {
    //loop infinitely to find the unique answer 
    for (;;) {
        ToughQuiz quiz = animalQuizCollection.get(random.nextInt(animalQuizCollection.size());
        //because you overriden equals this will produce true if there is already an element inside with the same hashCode
        if (!result.contains(quiz)) {
            result.add(quiz);
            break; //break the inner loop
        }
    }
}
于 2013-06-14T15:11:55.843 に答える
0

これを試してください:

Set<Answer> answersSet = new HashSet<Answer>();
List<ToughQuiz> differentAnswers = new ArrayList<ToughQuiz>();
for(ToughQuiz quiz : animalQuizCollection){
    if(answersSet.add(quiz.getAnswer())){
        differentAnswers.add(quiz);
    }
    if(differentAnswers.size() >= 5) break;
}

Answerあなたの場合、単なるString.

于 2013-06-14T15:14:10.990 に答える
0

マップは、対応する質問を追跡し、一意のキーを持ちます。

Map<Answer, ToughQuiz> map = new HashMap<>();  

for(ToughQuiz tq : animalQuizCollection)
    map.put(tq.getAnswer(), tq);  

マップには、すべての一意の回答とそれに対応するクイズが含まれるようになりました。

于 2013-06-14T15:32:24.240 に答える