0

OK、私の前のスレッドはコンセプトがあまり良くなかったので、ここに別のより正確なスレッドがあります。質問と 4 つの可能な答えを含むクイズがあります。質問は、assets フォルダーにインポートされた事前入力済みの sqlite データベースからのものです。コレクション シャッフルを使用して、回答をランダムにボタンに配置します。これで、50/50 ヘルプのボタンができました。たとえば、億万長者になりたい i のように、2 つの間違った回答を削除することができます。これが私の問題ですか?どこにあるのかわからない場合、2 つの間違った回答を削除する方法 (ボタンのテキストを "" に設定) は? そのうちの1つが正解です。これが私の質問コードです:

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

私はついにこのことを整理することができました、そしてそれは今働いています! これがコードです。

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 に答える
0

実際、解決すべき問題が 2 つあります。答えが間違っていることを知る方法と、3 つの間違った答えからランダムに 2 つの間違った答えを削除する方法です。つまり、表示順で常に最初の 2 つの間違った答えを選ぶと、プレーヤーに答えを与えることがよくあるということです。

私のアイデアは両方の問題を解決します。最初に、2つの間違った答えを持つ別のリストを作成します。シャッフルする前と同じように、c.getString(3)とc.getString(4)を体系的に選択できますが、問題ありません。

この 2 番目のリストを fifty/fifty プロセスで使用できるようにし、テキストを比較するなどして、対応する回答を削除します。

編集

私はちょうど私が理解していなかった何かを見ました。私が間違っていなければ、私が上で言ったことを忘れているかもしれませんが、実際にはもっと簡単です。

  • labels.add(new Answer(c.getString(2), true));Answers を次のようにリストに挿入します: 1 つはテキストで、もう 1 つは「正しいかどうか」を意味するブール値です。この属性の名前はわかりませんが、この説明の残りの部分では正しい名前が付けられていると思います
  • bOdgovor1.setTag(labels.get(0));これは、 Answer オブジェクトをボタンタグに格納することを意味します。

したがって、上で述べたよりもはるかに簡単に目標を達成する方法があります。答えが正しいかどうかを知るには、次のことを行うだけです。

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

4 つのボタンのうち 3 つに対して false を返し、正しい答えに対して true を返します。だからあなたはあなたの情報を持っています。3つの答えから2つだけ選んでください。何かのようなもの:

// 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 オブジェクトを参照する必要がある場合は、この参照を使用できます。あなたの場合、50-50の後に削除する回答が、参照しているもの(つまり正解)と同じではないことを確認できます。

お役に立てれば。

于 2013-03-15T18:34:07.953 に答える