【发布时间】:2018-08-12 00:44:49
【问题描述】:
如何在测验中随机抽出我已经提出的问题(以免重复)?在不使应用崩溃的情况下实现这一目标的最佳方法是什么?
问题:我想只保留一个 Java 类来解决所有问题,不知道在进行其他关卡活动时这是否是一种好方法。所以我一开始就尝试了 10 个问题,但我不断收到已经被问到的问题。然后我把这门课分成两个(每个 5 个问题)按新级别(简单级别 1 和 2)定义每个问题,但问题是一样的。
我猜,这是我在逻辑部分苦苦挣扎的那一行:
updateQuestion(rand.nextInt(mQuestionsLength));
这是我尝试过的,直到现在:
public class Quiz extends AppCompatActivity {
Button answer1, answer2;
TextView score, question, timer;
private Question mQuestions = new Question();
private String mExplanation;
private String mAnswer;
private int mScore = 0;
private int mQuestionNumber = 0;
private String mQuestionsIndex;
private int mAns = 0;
public int mQuestionsLength = mQuestions.mQuestions.length;
Random rand;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_easy_level1);
rand = new Random();
answer1 = (Button)findViewById(R.id.answer1);
answer2 = (Button)findViewById(R.id.answer2);
score = (TextView) findViewById(R.id.score);
question = (TextView) findViewById(R.id.question);
timer = (TextView) findViewById(R.id.timer);
score.setText("Overall Score: " + mScore);
updateQuestion(rand.nextInt(mQuestionsLength));
answer1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(answer1.getText() == mAnswer){
bingoAlert();
} else {
oopsAlert();
}
}
});
answer2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(answer2.getText() == mAnswer){
bingoAlert();
} else {
oopsAlert();
}
}
});
}
private void updateQuestion(int num){
question.setText(mQuestions.getQuestion(num));
answer1.setText(mQuestions.getChoice1(num));
answer2.setText(mQuestions.getChoice2(num));
mAnswer = mQuestions.getCorrectAnswer(num);
mQuestionsIndex = mQuestions.getQuestionIndex(num);
mQuestionNumber++;
}
private void bingoAlert(){
mScore+=5;
score.setText("Score: " + mScore);
if(mQuestionNumber == mQuestions.mQuestions.length){
// Do something...
}else{
updateQuestion(rand.nextInt(mQuestionsLength));
}
}
private void oopsAlert(){
mScore-=2;
score.setText("Score: " + mScore);
if(mQuestionNumber == mQuestions.mQuestions.length){
// Do something...
}else{
updateQuestion(rand.nextInt(mQuestionsLength));
}
}
问题类
public class Questions {
public static String[] mQuestions = new String[]{
"Question 1",
"Question 2",
"Question 3",
"Question 4",
"Question 5"
};
public static String[] mQuestionsIndex = new String[]{
"1", "2", "3", "4", "5"
};
private static String mChoices[][] = {
{"Choice 1", "Choice 2"},
{"Choice 1", "Choice 2"},
{"Choice 1", "Choice 2"},
{"Choice 1", "Choice 2"},
{"Choice 1", "Choice 2"}
};
private String mCorrectAnswers[] =
{"Choice 1", "Choice 2", "Choice 1", "Choice 2", "Choice 1"};
public String getQuestion(int a) {
String question = mQuestions[a];
return question;
}
public String getChoice1(int a) {
String choice = mChoices[a][0];
return choice;
}
public String getChoice2(int a) {
String choice = mChoices[a][1];
return choice;
}
public String getCorrectAnswer(int a) {
String answer = mCorrectAnswers[a];
return answer;
}
public String getQuestionIndex(int a) {
String questionsIndex = mQuestionsIndex[a];
return questionsIndex;
}
这是我的随机课
class RandomClass {
private Random randNum;
public RandomClass() {
randNum = new Random();
}
public int[] generateRandomArray(int arraySize){
int[] theArray = new int[arraySize];
for(int mQuestionNumber = 0; mQuestionNumber <= 5; mQuestionNumber++){
theArray[mQuestionNumber] = randNum.nextInt(6);
}
return theArray;
}
}
这是我最近的尝试:
private void updateQuestion(int num){
question.setText(mQuestions.getQuestion(num));
answer1.setText(mQuestions.getChoice1(num));
answer2.setText(mQuestions.getChoice2(num));
mAnswer = mQuestions.getCorrectAnswer(num);
mExplanation = mQuestions.getExplanation(num);
mQuestionsIndex = mQuestions.getQuestionIndex(num);
for (int mQuestionNumber = 0; mQuestionNumber <= 5; mQuestionNumber++) {
int[] ints = new RandomClass().generateRandomArray(5);
}
}
谢谢!
【问题讨论】:
-
您可以将已显示的问题存储在一个列表中,并在显示另一个新问题集时检查该列表?
-
谢谢。你能告诉我一个如何做的例子吗,因为我现在在这部分卡了差不多 2 个小时。 :(
-
谢谢。所以你的意思是,像这样:'ArrayList
number = new ArrayList (); for (int mQuestionNumber = 1; mQuestionNumber -
@RohitSharma 但它只会随机播放列表的内容,不会阻止您再次显示相同的问题。看到这个geeksforgeeks.org/collections-shuffle-java-examples