Android 如何在不重复SQLite的情况下随机化问题?

Android 如何在不重复SQLite的情况下随机化问题?,android,random,android-sqlite,sqliteopenhelper,Android,Random,Android Sqlite,Sqliteopenhelper,我正在我的android studio中开发一个简单的测试。我使用的是一个数据库,但我想在用户每次点击测验按钮时将问题随机化。到目前为止,我已经创建了5个示例问题。我建议: 选项1:如果你不想重复问题 使用集合,因为集合不允许重复,列表可以被洗牌 调整(如果还没有)你的课堂问题,这样你就可以在集合中使用,并且不允许重复…(通过这个覆盖equals和hashcode) 填充集合,洗牌,获取其中的随机元素 选项2:如果你只想随机问其中一个问题 这是完全一样的, 不要使用集合,而是使用列表 省

我正在我的android studio中开发一个简单的测试。我使用的是一个数据库,但我想在用户每次点击测验按钮时将问题随机化。到目前为止,我已经创建了5个示例问题。

我建议:

选项1:如果你不想重复问题
  • 使用集合,因为集合不允许重复,列表可以被洗牌

  • 调整(如果还没有)你的课堂问题,这样你就可以在集合中使用,并且不允许重复…(通过这个覆盖equals和hashcode

  • 填充集合,洗牌,获取其中的随机元素


  • 选项2:如果你只想随机问其中一个问题 这是完全一样的,

  • 不要使用集合,而是使用列表
  • 省略步骤2,因为重复的问题不是什么大问题
  • 但是仍然填充集合,洗牌,获取其中的随机元素
  • 你在这里:)

    我建议你:

    选项1:如果你不想重复问题
  • 使用集合,因为集合不允许重复,列表可以被洗牌

  • 调整(如果还没有)你的课堂问题,这样你就可以在集合中使用,并且不允许重复…(通过这个覆盖equals和hashcode

  • 填充集合,洗牌,获取其中的随机元素


  • 选项2:如果你只想随机问其中一个问题 这是完全一样的,

  • 不要使用集合,而是使用列表
  • 省略步骤2,因为重复的问题不是什么大问题
  • 但是仍然填充集合,洗牌,获取其中的随机元素

  • 这就是:)

    使用
    集合。在
    列表中洗牌
    ,然后在单击按钮时使用
    迭代器挑选问题

    假设您为
    问题
    类实现了
    equals
    hashcode
    ,那么
    LinkedHashSet
    将删除重复项,因此不会发生重复

    这是一个基于你的课堂的活动,应该展示这些概念

    public class QuizActivityMarketing extends Activity {
    
        private Iterator<Question> questionIterator;
        private TextView txtQuestion;
        private RadioButton rda, rdb, rdc, rdd;
        private Button butNext;
    
        private Question currentQ;
        private int score = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Define your views
            txtQuestion = (TextView) findViewById(R.id.textView1);
            rda = (RadioButton) findViewById(R.id.radio0);
            rdb = (RadioButton) findViewById(R.id.radio1);
            rdc = (RadioButton) findViewById(R.id.radio2);
            rdd = (RadioButton) findViewById(R.id.radio3);
            butNext = (Button) findViewById(R.id.button1);
    
            // Get and randomize the questions
            DbHelperMarketing db = new DbHelperMarketing(this);
            final List<Question> questions = db.getAllQuestions();
            Collections.shuffle(questions);
            questionIterator = new LinkedHashSet<Question>(questions).iterator();
    
            // Setup the first question
            if (questionIterator.hasNext()) {
                currentQ = questionIterator.next();
                setQuestionView(currentQ);
            }
    
            // Hook up the button-clicking
            butNext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    // Check the correct answer
                    RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup1);
                    RadioButton answer = (RadioButton) findViewById(grp.getCheckedRadioButtonId());
                    Log.d("yourans", currentQ.getANSWER() + " " + answer.getText());
                    if (currentQ.getANSWER().equals(answer.getText())) {
                        score++;
                        Log.d("score", "Your score" + score);
                    }
    
                    // Load the next question, if there are any
                    if (questionIterator.hasNext()) {
                        currentQ = questionIterator.next();
                        setQuestionView(currentQ);
                    } else { // Done asking questions
                        setQuestionView(null);
    
                        Intent intent = new Intent(QuizActivityMarketing.this, ResultActivity.class);
                        Bundle b = new Bundle();
                        b.putInt("score", score); //Your score
                        intent.putExtras(b); //Put your score to your next Intent
                        startActivity(intent);
                        finish();
                    }
                }
            });
        }
    
        private void setQuestionView(Question currentQuestion) {
            if (currentQuestion != null) {
                txtQuestion.setText(currentQuestion.getQUESTION());
                rda.setText(currentQuestion.getOPTA());
                rdb.setText(currentQuestion.getOPTB());
                rdc.setText(currentQuestion.getOPTC());
                rdd.setText(currentQuestion.getOPTD());
            } else {
                txtQuestion.setText("");
                rda.setText("");
                rdb.setText("");
                rdc.setText("");
                rdd.setText("");
            }
        }
    
    }
    
    公共类QuizaActivityMarketing扩展活动{
    私有迭代器;
    私有文本视图TXT问题;
    专用单选按钮rda、rdb、rdc、rdd;
    私人按钮butNext;
    私人问题;
    私人智力得分=0;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //定义您的视图
    txtQuestion=(TextView)findViewById(R.id.textView1);
    rda=(RadioButton)findViewById(R.id.radio0);
    rdb=(RadioButton)findViewById(R.id.radio1);
    rdc=(RadioButton)findViewById(R.id.radio2);
    rdd=(RadioButton)findViewById(R.id.radio3);
    但是下一步=(按钮)findViewById(R.id.button1);
    //获取并随机化问题
    DbHelperMarketing db=新的DbHelperMarketing(此);
    最终列表问题=db.getAllQuestions();
    收集。洗牌(问题);
    questionIterator=新的LinkedHashSet(questions).iterator();
    //设置第一个问题
    if(questionIterator.hasNext()){
    currentQ=questionIterator.next();
    设置问题视图(currentQ);
    }
    //点击连接按钮
    但是next.setOnClickListener(newview.OnClickListener(){
    @凌驾
    公共void onClick(视图){
    //检查正确答案
    放射组grp=(放射组)findViewById(R.id.RadioGroup 1);
    RadioButton answer=(RadioButton)findViewById(grp.getCheckedRadioButtonId());
    Log.d(“yourans”,currentQ.getANSWER()+“”+answer.getText());
    if(currentQ.getANSWER().equals(answer.getText())){
    分数++;
    Log.d(“分数”、“你的分数”+分数);
    }
    //加载下一个问题(如果有)
    if(questionIterator.hasNext()){
    currentQ=questionIterator.next();
    设置问题视图(currentQ);
    }否则{//提问完毕
    setQuestionView(空);
    意向意向=新意向(QuizActivityMarketing.this、ResultActivity.class);
    Bundle b=新Bundle();
    b、 putInt(“分数”,分数);//你的分数
    意图。附加动作(b);//把你的分数放在下一个意图上
    星触觉(意向);
    完成();
    }
    }
    });
    }
    私有void setQuestionView(问题currentQuestion){
    如果(currentQuestion!=null){
    setText(currentQuestion.getQUESTION());
    setText(currentQuestion.getOPTA());
    setText(currentQuestion.getOPTB());
    setText(currentQuestion.getOPTC());
    setText(currentQuestion.getOPTD());
    }否则{
    txtQuestion.setText(“”);
    rda.setText(“”);
    rdb.setText(“”);
    rdc.setText(“”);
    rdd.setText(“”);
    }
    }
    }
    
    使用
    集合。在
    列表上洗牌
    ,然后在单击按钮时使用
    迭代器来挑选问题

    假设您为
    问题
    类实现了
    equals
    hashcode
    ,那么
    LinkedHashSet
    将删除重复项,因此不会发生重复

    这是一个基于你的课堂的活动,应该展示这些概念

    public class QuizActivityMarketing extends Activity {
    
        private Iterator<Question> questionIterator;
        private TextView txtQuestion;
        private RadioButton rda, rdb, rdc, rdd;
        private Button butNext;
    
        private Question currentQ;
        private int score = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Define your views
            txtQuestion = (TextView) findViewById(R.id.textView1);
            rda = (RadioButton) findViewById(R.id.radio0);
            rdb = (RadioButton) findViewById(R.id.radio1);
            rdc = (RadioButton) findViewById(R.id.radio2);
            rdd = (RadioButton) findViewById(R.id.radio3);
            butNext = (Button) findViewById(R.id.button1);
    
            // Get and randomize the questions
            DbHelperMarketing db = new DbHelperMarketing(this);
            final List<Question> questions = db.getAllQuestions();
            Collections.shuffle(questions);
            questionIterator = new LinkedHashSet<Question>(questions).iterator();
    
            // Setup the first question
            if (questionIterator.hasNext()) {
                currentQ = questionIterator.next();
                setQuestionView(currentQ);
            }
    
            // Hook up the button-clicking
            butNext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    // Check the correct answer
                    RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup1);
                    RadioButton answer = (RadioButton) findViewById(grp.getCheckedRadioButtonId());
                    Log.d("yourans", currentQ.getANSWER() + " " + answer.getText());
                    if (currentQ.getANSWER().equals(answer.getText())) {
                        score++;
                        Log.d("score", "Your score" + score);
                    }
    
                    // Load the next question, if there are any
                    if (questionIterator.hasNext()) {
                        currentQ = questionIterator.next();
                        setQuestionView(currentQ);
                    } else { // Done asking questions
                        setQuestionView(null);
    
                        Intent intent = new Intent(QuizActivityMarketing.this, ResultActivity.class);
                        Bundle b = new Bundle();
                        b.putInt("score", score); //Your score
                        intent.putExtras(b); //Put your score to your next Intent
                        startActivity(intent);
                        finish();
                    }
                }
            });
        }
    
        private void setQuestionView(Question currentQuestion) {
            if (currentQuestion != null) {
                txtQuestion.setText(currentQuestion.getQUESTION());
                rda.setText(currentQuestion.getOPTA());
                rdb.setText(currentQuestion.getOPTB());
                rdc.setText(currentQuestion.getOPTC());
                rdd.setText(currentQuestion.getOPTD());
            } else {
                txtQuestion.setText("");
                rda.setText("");
                rdb.setText("");
                rdc.setText("");
                rdd.setText("");
            }
        }
    
    }
    
    公共类QuizaActivityMarketing扩展活动{
    私有迭代器;
    私有文本视图TXT问题;
    专用单选按钮rda、rdb、rdc、rdd;
    专用按钮