Java Android::我如何随机化我的测验问题?

Java Android::我如何随机化我的测验问题?,java,android,random,Java,Android,Random,我有一个测验应用程序,它显示了来自SQLite Db的几个问题,它有50个问题,但它必须在游戏部分显示5个问题,并将这些问题随机化 我为解决方案累了很多次,但什么也没有:/ 在源代码中,qid是Db。ID primery密钥,基于显示问题并找到答案 活动内容如下: package com.example.quiz; import java.util.List; import java.util.Random; import android.os.Bundle; import android.

我有一个测验应用程序,它显示了来自SQLite Db的几个问题,它有50个问题,但它必须在游戏部分显示5个问题,并将这些问题随机化

我为解决方案累了很多次,但什么也没有:/

在源代码中,qid是Db。ID primery密钥,基于显示问题并找到答案

活动内容如下:

package com.example.quiz;

import java.util.List;
import java.util.Random;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.DatabaseUtils;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class QuizActivity extends Activity {
    private static final DbHelper remote = null;
    List <Question> quesList;
    int score = 0;

    Question currentQ;
    TextView txtQuestion;
    RadioButton rda, rdb, rdc, rdd;
    Button butNext;

    int qid;
    int qNumber = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quiz);
        DbHelper db = new DbHelper(this);

        quesList = db.getAllQuestions();
        currentQ = quesList.get(qid);

        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);

        setQuestionView();

        butNext.setOnClickListener(new View.OnClickListener() { 

            @Override
            public void onClick(View v) {
                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);
                }

                if(qNumber < 5){    

                    currentQ = quesList.get(qid);
                    setQuestionView();
                }

                else

                {
                    Intent intent = new Intent(QuizActivity.this, ResultActivity.class);
                    Bundle b = new Bundle();
                    b.putInt("score", score); //Pontunk
                    intent.putExtras(b); //Pont tovább vivése a következő kérdéshez
                    startActivity(intent);
                    finish();
                }
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.quiz, menu);
        return true;
    }
    private void setQuestionView()
    {
        txtQuestion.setText(currentQ.getQUESTION());
        rda.setText(currentQ.getOPTA());
        rdb.setText(currentQ.getOPTB());
        rdc.setText(currentQ.getOPTC());
        rdd.setText(currentQ.getOPTD());

        Random rand = new Random(); 
        for(int i=0; i<5;i++){
        int r1 = rand.nextInt(50) + 1;
        qid = r1;
        }
        qNumber++;
    }
}
package.com.example.quick;
导入java.util.List;
导入java.util.Random;
导入android.os.Bundle;
导入android.app.Activity;
导入android.content.Intent;
导入android.database.DatabaseUtils;
导入android.util.Log;
导入android.view.Menu;
导入android.view.view;
导入android.widget.Button;
导入android.widget.RadioButton;
导入android.widget.RadioGroup;
导入android.widget.TextView;
公共类quizaActivity扩展了活动{
私有静态最终DbHelper remote=null;
清单问题清单;
智力得分=0;
问题Q;
文本视图TXT问题;
单选按钮rda、rdb、rdc、rdd;
按钮butNext;
int-qid;
int qNumber=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u测验);
DbHelper db=新的DbHelper(this);
quesList=db.getAllQuestions();
currentQ=quesList.get(qid);
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);
setQuestionView();
但是next.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
放射组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(“分数”、“你的分数”+分数);
}
如果(qNumber<5){
currentQ=quesList.get(qid);
setQuestionView();
}
其他的
{
意向意向=新意向(QuizActivity.this、ResultActivity.class);
Bundle b=新Bundle();
b、 putInt(“分数”,分数);//庞顿
意图。附加条款(b);//托瓦布桥克维茨凯兹·克尔德谢兹之家
星触觉(意向);
完成();
}
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.quick,menu);
返回true;
}
私有void setQuestionView()
{
setText(currentQ.getQUESTION());
setText(currentQ.getOPTA());
setText(currentQ.getOPTB());
setText(currentQ.getOPTC());
setText(currentQ.getOPTD());
Random rand=新的Random();

对于(int i=0;i来说,最重要的事情是检查碰撞信息:这将告诉您在哪里查找


但是,我想我可以看到问题所在。您的随机数生成器返回一个介于0和49之间的值,然后加1,将一个值放入变量qid中,范围为1到50。但是列表是基于零的,因此当您访问元素50时,它会崩溃。(问题0永远不会被访问).

您可以通过运行此查询获取随机问题:


db.rawQuery(“从您的表中按随机顺序选择*限制5”,null);

为什么不选择一个随机的非重复索引,然后在该索引处提取问题?谢谢您的帮助!我不知道使用SQL更简单。