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