9

私は単一選択と複数選択のテストに取り組んでいます。

いくつかの質問と各質問に対する4つの回答があります。

各回答がラジオボタンに割り当てられているので、回答をシャッフルしています。これは、Randomがアイテムを含む配列リストであり、r1、r2、r3、r4がラジオボタンである配列リストをシャッフルする方法です。

random.add(val);
Collections.shuffle(random);


r1.setText(random.get(0));
r2.setText(random.get(1));
r3.setText(random.get(2));
r4.setText(random.get(3));

答えをごちゃ混ぜに表示することはできますが、答えを選択するときは、答えが正しいか間違っているかを示す必要があります。

Sample question and options.
1. which language is used for android programming?
 A.PHP
 B.JAVA
 C.C
 D.C++

正解はBです。正解がBであることを表示する必要があります。

これを達成する方法。

編集: 私はこれを試しました:

各ラジオボタンをクリックすると、値Aが割り当てられ、正しい表示が正しい場合は値をxml値と比較しますが、混乱すると機能しません。

2xmlを 編集

<Question no="1" text="Which Programming language is used in android develoment" type="SCA" noc="4" jumble="NO" correctans="PHP">
<choice a = "PHP" flag="A"> 
<choice b = "JAVA" flag="B"> 
<choice c = "C" flag="C"> 
<choice d = "C++" flag="D"> 
4

8 に答える 8

6

Option-isOptionCorrectペアを使用してハッシュマップを作成できます。あなたの場合のように:

HashMap<String, Boolean> choices = new HashMap<String, Boolean>();
choices.put("PHP", false);
choices.put("JAVA", true);
choices.put("C", false);
choices.put("C++", false);

次に、キーと値のペアをシャッフルします。正しい選択はtrue、HashMapで価値のあるものになります。

于 2012-12-26T05:57:52.783 に答える
4

Egorは彼が提案していることを明確にしていますが、現在の実装で作業できるようにします。

class Option{
      //You can add any other parameters if required.
      String optionText;
      boolean isAnswer;
}

// Use arraylist of Option class like this ArrayList<Option> options = new ArrayList<Option>(); // in your case random

// Now suffle it. Collections.shuffle(options); // get the user selected option and verify using. if(options.get(userSelectedOptionPosition).isAnswer){ //show "You are Correct!" }else{ // show "You are In correct!" }

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

于 2012-12-27T06:33:27.853 に答える
2

純粋な文字列の代わりに、モデルの「ランダム」配列リストに回答を保持できます。

private class AnswerModel {
    string answer;
    boolean flag;

//... getters and setters...
}

ここで、真の回答のフラグをtrueに設定し、他のすべてのフラグをfalseに設定できます。そうすれば、答えが正しかった場合に簡単に戻ることができます。

于 2012-12-31T14:50:09.083 に答える
2

これはややナイーブな解決策ですが、うまくいくはずです。

class Question {
    String message;
    String answer;
    List<String> options; //"Java", "PHP", etc
}

質問オブジェクトのマップのキーをシャッフルします。ラジオボタンで、次のような操作を行います。r1.setText(random.get(0))

クリックすると、

String choice = null;
for (RadioButton rb : rBtns) {
    if (rb.isSelected) {
        choice = rb.getText(); break();
    }
}

if (choice.equals(question.getAnswer))
    return true; //correct
else
    return false; //wrong
于 2012-12-30T12:00:33.960 に答える
2

ここでの最善のアプローチは、で操作するのではなく、質問に関するすべての情報(値、回答のリスト、正解のインデックス)を含むクラスStringsを作成することです。QuestionXMLを解析するときは、Questionオブジェクトのリストを作成してから操作します。マッピングの問題はもうありません。お役に立てれば。

于 2012-12-01T07:19:05.953 に答える
1

ここにはすでにいくつかの良い答えがあります。しかし、別のオプションは、独自のシャッフル関数を作成することです。シャッフルアルゴリズムは、少なくとも配列に対して線形時間で実行される非常に単純なアルゴリズムです。独自のシャッフル関数を作成することで、正解がどこに到達するかを追跡できます。

これを簡単にするために、シャッフルされたコレクション内の指定されたインデックスの新しいインデックスを返すコードを投稿しています。この関数は元のコレクションを変更(変更)するため、これは機能するはずです。

/**
 * @return Returns the new index of the element that was placed at correctIndex,
 *         or -1 if the correctIndex parameter was out of bounds.
 */
public int shuffleAnswers(Collection<String> collection, index correctIndex) {
    String[] shuffleArray = new String[collection.size()];
    int returnValue = -1;

    collection.toArray(shuffleArray); // Convert to array
    collection.clear(); // We have to add the elements again later

    // Pick random elements
    for (int i = shuffleArray.length; i > 0; i--) {
        int randIndex = Math.random() * i;
        if (returnValue == -1 && randIndex == correctIndex) {
            // This only works if elements are added to the end
            // So you may want to limit the function to ArrayLists or LinkedLists
            returnValue = collection.size();
        }

        // Add the randomly selected element to the collection
        collection.add(shuffleArray[randIndex]);

        // We must ensure that we don't lose elements
        // So we swap them down from the end
        shuffleArray[randIndex] = shuffleArray[i - 1];
    }

    return returnValue;
}

コメントが言うように、これはコレクションの最後に要素を追加し、コレクションに追加された最初から最後の要素まで配列を埋めるコレクションでのみ機能することに注意してください。

これはおそらく他のソリューションよりも遅いですが、とにかくシャッフルが必要なので、実行速度にあまり影響しないことに注意してください。

于 2012-12-31T16:59:47.743 に答える
1

もう1つのオプションは、correctAnswer文字列を取得してから、ユーザーの選択を文字列と比較することです(を使用.equals())。

于 2013-01-01T16:40:06.520 に答える
0

これは私がすることです。回答の位置ではなくXMLファイルで回答を覚えているので、選択したラジオボタンでテキスト(この場合は「PHP」、「Java」、「C ++」、または「C」)を取得し、正しい回答と比較します。 。

ジャンブリングはこれに影響を与えることはできません。さもなければ、あなたは何か間違ったことをしています。

于 2013-01-01T12:59:09.733 に答える