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。

如何实现这一点。

编辑: 我试过这个:

每个单选按钮的 Onclick 分配值 A 并将该值与 xml 值进行比较,如果其正确显示正确但当我混乱时它将不起作用。

编辑 2 xml

<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

You can create a hashmap with Option-isOptionCorrect pair. Like for your case:

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

Now shuffle the key-value pairs. Your correct choice will be one which has value true in the 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

这是一个有点幼稚的解决方案,但它应该可以工作。

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

在您的 Question 对象中随机播放 Map 的键在您的单选按钮中,执行类似的操作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

您可以将答案保存在模型中的“随机”数组列表中,而不是纯字符串;

private class AnswerModel {
    string answer;
    boolean flag;

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

在这里,您可以将您真正答案的标志设置为 true,并将所有其他标志设置为 false。这样,如果答案正确,您可以简单地返回。

于 2012-12-31T14:50:09.083 回答
2

这里最好的方法不是使用 操作Strings,而是创建一个Question类,该类将包含有关问题的所有信息:它的值、答案列表和正确答案的索引。解析 XML 时,创建Question对象列表,然后使用它们。不会有任何映射问题了。希望这可以帮助。

于 2012-12-01T07:19:05.953 回答
1

这里已经有几个很好的答案。但另一种选择是编写自己的 shuffle 函数。shuffle 算法是一个非常简单的算法,它在线性时间内运行,至少对于数组来说是这样。通过编写自己的 shuffle 函数,您可以跟踪正确答案的最终位置。

为了简单起见,我发布了代码,该代码返回洗牌集合中指定索引的新索引。该函数改变(改变)原始集合,所以这应该工作。

/**
 * @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

另一种选择是只拥有一个correctAnswer字符串,然后将用户的选择与字符串(使用.equals())进行比较。

于 2013-01-01T16:40:06.520 回答
0

这就是我要做的。由于您在 XML 文件中记住答案而不是答案位置,因此在选定的单选按钮上获取文本(在本例中为“PHP”、“Java”、“C++”或“C”)并将其与正确答案进行比较.

混杂不能影响这一点,否则你做错了什么。

于 2013-01-01T12:59:09.733 回答