0

好的,我之前的线程不是很好的概念,所以这里是另一个更精确的。我有一个带有问题和 4 个可能答案的测验。问题来自资产文件夹中导入的预填充 sqlite 数据库。我使用集合 shuffle 将答案随机放置到按钮上。现在,我有一个 50/50 帮助按钮,就像我想成为百万富翁一样,删除两个错误的答案。这是我的问题?如果我不知道它们在哪里,如何删除两个错误的答案(将它们的按钮文本设置为“”)?其中之一是正确答案。这是我的问题代码:

public void nextQuestion() {

        TestAdapter mDbHelper = new TestAdapter(this);
        mDbHelper.createDatabase();

        try{ 

            mDbHelper.open();

            Cursor c = mDbHelper.getTestData(generateWhereClause());
            mAnsweredQuestions.add(c.getLong(0));

            List<Answer> labels = new ArrayList<Answer>();

            labels.add(new Answer(c.getString(2), true));
            labels.add(new Answer(c.getString(3), false));
            labels.add(new Answer(c.getString(4), false));
            labels.add(new Answer(c.getString(5), false));

            Collections.shuffle(labels);

            tacanOdg = c.getString(2);

            if(brojacPogresnihOdgovora < 5){


        question.setText(c.getString(1));

        bOdgovor1.setText(labels.get(0).option);
        bOdgovor1.setTag(labels.get(0));
        bOdgovor1.setOnClickListener(clickListener);

        bOdgovor2.setText(labels.get(1).option);
        bOdgovor2.setTag(labels.get(1));
        bOdgovor2.setOnClickListener(clickListener);

        bOdgovor3.setText(labels.get(2).option);
        bOdgovor3.setTag(labels.get(2));
        bOdgovor3.setOnClickListener(clickListener);

        bOdgovor4.setText(labels.get(3).option);
        bOdgovor4.setTag(labels.get(3));
        bOdgovor4.setOnClickListener(clickListener);

        netacniOdg.setText("" + brojacPogresnihOdgovora);
        score.setText("Score: " + brojacTacnihOdgovora);
            }

        }
        finally{ 
            mDbHelper.close();
        }
4

3 回答 3

0

实际上你有两个问题要解决:如何知道一个答案是错误的,以及如何从三个答案中随机删除两个错误答案?我的意思是,如果你总是按显示顺序选择前两个错误的答案,你就经常将答案提供给玩家。

我的想法将解决这两个问题:在开始时创建另一个包含 2 个错误答案的列表:您可以系统地选择 c.getString(3) 和 c.getString(4),因为它是在 shuffle 之前,没关系。

使第二个列表可用于五十/五十进程,并删除相应的答案,例如通过比较文本。

编辑

我只是看到了一些我不明白的东西。如果我没记错的话,你可能会忘记我上面说的,实际上要简单得多。

  • 您像这样在列表中插入 Answers: labels.add(new Answer(c.getString(2), true));,所以我想 Answer 是一个具有(至少)2个属性的类。其中一个是文本,另一个是布尔值,意思是“正确与否?”。我不知道该属性的名称,但我认为对于本说明的其余部分,它的名称是正确的
  • 然后你这样bOdgovor1.setTag(labels.get(0));做意味着你将 Answer 对象存储在按钮标签中。

因此,有一种方法可以比我上面所说的简单得多。要知道答案是否正确,您只需执行以下操作:

((Answer)bOdgovor1.getTag()).correct

对于四个按钮中的三个,它将返回 false,对于正确答案,它将返回 true。所以你有你的信息。只需从三个答案中选择两个。就像是:

// Get a random number between 1 and 3, 
// it is the number of the wrong answer you will not delete
int rnd = new Random().nextInt(3) + 1;

// Init the incorrect answer counter
int i = 0;

// Check the answers. Of course, this code could be factorized in a sub-method
if (!((Answer)bOdgovor1.getTag()).correct) {
  // Incorrect answer
  i++;
  // The (rnd)th incorrect answer will not be deleted, the others will
  if (i != rnd) {
    bOdgovor1.setText("");
  }
}
if (!((Answer)bOdgovor2.getTag()).correct) {
  // Incorrect answer
  i++;
  // The (rnd)th incorrect answer will not be deleted, the others will
  if (i != rnd) {
    bOdgovor2.setText("");
  }
}
if (!((Answer)bOdgovor3.getTag()).correct) {
  // Incorrect answer
  i++;
  // The (rnd)th incorrect answer will not be deleted, the others will
  if (i != rnd) {
    bOdgovor3.setText("");
  }
}
if (!((Answer)bOdgovor4.getTag()).correct) {
  // Incorrect answer
  i++;
  // The (rnd)th incorrect answer will not be deleted, the others will
  if (i != rnd) {
    bOdgovor4.setText("");
  }
}
于 2013-03-15T18:31:05.113 回答
0

您可以做的是在将答案添加到列表中时,将对 Answer 对象的引用保存在变量中。现在,当您需要引用 Answer 对象时,您可以使用此引用。在您的情况下,您可以确保在 50-50 之后删除的答案与您参考的答案不同(即正确答案)。

希望这可以帮助。

于 2013-03-15T18:34:07.953 回答
0

我终于设法解决了这个问题,现在它正在工作!这是代码。

int rnd1, rnd2;

                List<Integer> list = new ArrayList<Integer>();              

                if (!((Answer)bOdgovor1.getTag()).isCorrect) {
                    list.add(1);
                }
                if (!((Answer)bOdgovor2.getTag()).isCorrect) {
                    list.add(2);
                }
                if (!((Answer)bOdgovor3.getTag()).isCorrect) {
                    list.add(3);
                }
                if (!((Answer)bOdgovor4.getTag()).isCorrect) {
                    list.add(4);
                }   
                Collections.shuffle(list);
                rnd1 = list.get(0);
                rnd2 = list.get(1);

                if ((rnd1 == 1) || (rnd2 == 1)){
                    bOdgovor1.setText("");
                }
                if ((rnd1 == 2) || (rnd2 == 2)){
                    bOdgovor2.setText("");
                }
                if ((rnd1 == 3) || (rnd2 == 3)){
                    bOdgovor3.setText("");
                }
                if ((rnd1 == 4) || (rnd2 == 4)){
                    bOdgovor4.setText("");
                }
            }
于 2013-03-16T20:37:20.410 回答