10

質問と回答の 2 つの配列があります

String questions[] = {
"Q1?",
"Q2?",
"Q3?"};

String answers[] = {
    "A1?",
    "A2?",
    "A3?"};

私はCollections.shuffle(Arrays.asList(questions);各配列をシャッフルしていました。シャッフル後に同じ順序を維持するように各配列をシャッフルするにはどうすればよいですか?

4

6 に答える 6

12

インデックスを保持する新しい配列をシャッフルすることができます。そして、最初のインデックスから両方の配列から要素を取得します。

List<Integer> indexArray = Arrays.asList(0, 1, 2);

Collections.shuffle(indexArray);

String question = questions[indexArray.get(0)];
String answer = answers[indexArray.get(0)];

もちろん、他の回答が示唆するように、class包含questionsを作成し、よりオブジェクト指向の方法になります。answersそうすれば、現在のアプローチと比較して、Listまたはを 1 つだけ維持する必要があります。array3 arrays

于 2012-11-23T16:40:54.957 に答える
8

質問と回答の両方を保持するためのクラスを作成すると、より簡単でオブジェクト指向のソリューションになります。

class QuestionAnswerPair {
    private final String question;
    private final String answer;

    public QuestionAnswerPair(String question, String answer) {
        this.question = question;
        this.answer = answer;
    }
}

その後:

QuestionAnswerPair[] questions = new QuestionAnswerPair[] {
    // Put questions here
};

Collections.shuffle(Arrays.asList(questions));
于 2012-11-23T16:49:13.953 に答える
6

クラスを作成し、QuestionAndAnswerそのクラスの配列を使用します。

于 2012-11-23T16:44:59.287 に答える
2

回答と質問をシャッフルする代わりに、質問/回答へのインデックスを持つ整数の追加の配列をシャッフルし、シャッフルされたインデックスを使用して対応する配列から質問と回答を抽出することができます。

于 2012-11-23T16:55:23.893 に答える