gpt4 book ai didi

java - 从数据库加载随机 Qid(问题)?

转载 作者:行者123 更新时间:2023-12-01 09:29:28 25 4
gpt4 key购买 nike

我想每次加载不同的问题。我尝试了以下代码,但它仅随机更改第一个问题。所有其他问题都按顺序排列。

QuizHelper db = new QuizHelper(this);  // my question bank class
quesList = db.getAllQuestions(); // this will fetch all quetonall questions
Random random = new Random(); currentQ = quesList.get(random.nextInt(quesList.size()));

完整代码在这里。

public class QuestionActivity extends Activity {
List<Question> quesList;

int score = 0;
int qid = 0;

Question currentQ;
TextView txtQuestion, times, scored;
Button button1, button2, button3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

QuizHelper db = new QuizHelper(this); // my question bank class
quesList = db.getAllQuestions(); // this will fetch all quetonall questions
Random random = new Random(); currentQ = quesList.get(random.nextInt(quesList.size()));
// currentQ = quesList.get(qid); // the current question

txtQuestion = (TextView) findViewById(R.id.txtQuestion);
// the textview in which the question will be displayed

// the three buttons,
// the idea is to set the text of three buttons with the options from question bank
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);

// the textview in which score will be displayed
scored = (TextView) findViewById(R.id.score);

// the timer
times = (TextView) findViewById(R.id.timers);

// method which will set the things up for our game
setQuestionView();
times.setText("00:02:00");

// A timer of 60 seconds to play for, with an interval of 1 second (1000 milliseconds)
CounterClass timer = new CounterClass(80000, 1000);
timer.start();

// button click listeners
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

// passing the button text to other method
// to check whether the anser is correct or not
// same for all three buttons
getAnswer(button1.getText().toString());
}
});

button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAnswer(button2.getText().toString());
}
});

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAnswer(button3.getText().toString());
}
});
}

public void getAnswer(String AnswerString) {
if (currentQ.getANSWER().equals(AnswerString)) {

// if conditions matches increase the int (score) by 1
// and set the text of the score view
score++;
scored.setText("Score : " + score);
} else {

// if unlucky start activity and finish the game

Intent intent = new Intent(QuestionActivity.this,
ResultActivity.class);

// passing the int value
Bundle b = new Bundle();
b.putInt("score", score); // Your score
intent.putExtras(b); // Put your score to your next
startActivity(intent);
finish();
}
if (qid < 25) {

// if questions are not over then do this
currentQ = quesList.get(qid);
setQuestionView();
} else {

// if over do this
Intent intent = new Intent(QuestionActivity.this,
ResultActivity.class);
Bundle b = new Bundle();
b.putInt("score", score); // Your score
intent.putExtras(b); // Put your score to your next
startActivity(intent);
finish();
}
}

@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
public class CounterClass extends CountDownTimer {

public CounterClass(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
// TODO Auto-generated constructor stub
}

@Override
public void onFinish() {
times.setText("Time is up");
}

@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub

long millis = millisUntilFinished;
String hms = String.format(
"%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis)
- TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS
.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis)
- TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS
.toMinutes(millis)));
System.out.println(hms);
times.setText(hms);
}
}

private void setQuestionView() {

// the method which will put all things together
txtQuestion.setText(currentQ.getQUESTION());
button1.setText(currentQ.getOPTA());
button2.setText(currentQ.getOPTB());
button3.setText(currentQ.getOPTC());

qid++;
}
}

最佳答案

这是由于qid仅增加1。并且使用

currentQ = quesList.get(qid);

在你的 getAnswer() 上。使您的 Random 全局化,然后尝试将 currentQ 更改为

currentQ = quesList.get(random.nextInt(quesList.size()));

here是如何避免重复随机的。

[编辑]

好的,为了更简单,这样做可以避免重复。进行全局 int 仓位

position = random.nextInt(quesList.size())
currentQ = quesList.get(position);

然后在 setQuestion 的末尾

quesList.remove(position);

就是这样,问题永远不会重复。希望有帮助。

关于java - 从数据库加载随机 Qid(问题)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39566112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com