我正在开发一个测验应用。我设法用
随机化了问题(来自数组)int position = new Random().nextInt(questions.length);
但问题不断重复。我如何让它停止到达时可以说10个问题而不重复?如果有帮助,这是我的代码:
gcfQuiz.setText(questions[position]);
gcfButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText Answer = (EditText) findViewById(R.id.txtAns1);
String finAns = Answer.getText().toString();
if (finAns==answers[position]){
correct++;
}
position++;
if (position<questions.length)
{
gcfQuiz.setText(questions[position]);
}else {
Intent in = new Intent(getApplicationContext(), gcfResult.class);
startActivity(in);
}
}
});
答案 0 :(得分:2)
您可以使用List
,然后删除元素(如果已选择):
List<Question> questions = new ArrayList<Question>();
// For Question class, see below.
// Get some random valid index from the list.
int index = new Random().nextInt(questions.size());
// Remove the question from the list and store it into a variable.
Question currQuestion = questions.remove(i);
为了您的信息,我认为Question
类看起来像这样。这种方法通常比分别带有问题和答案的两个独立数组更好:
class Question {
private String text;
private String answer;
public Question(String text, String answer) {
this.text = text;
this.answer = answer;
}
public boolean isCorrectAnswer(String inputAnswer) {
return Objects.equals(answer, inputAnswer);
}
}
==
来比较String
。 从不曾经这样做过。请改用equals()
。见How do I compare strings in Java?。Answer
的变量。根据Java命名约定,变量应以小写字符开头。见Code Conventions at the Oracle website。Question
类,因为它包含答案字符串。见An Object Must be Responsible for Itself。答案 1 :(得分:1)
int n=questions.length;
//if n=100 means it give random numb with no duplicate values with in the range 100.
Random r = new Random();
Set<Integer> positionvalue = new HashSet<>();
for(int i = 0; i <n; i++){
while(true) {
int number = r.nextInt(n) + 1;
if (positionvalue.contains(number) == false) {
positionvalue.add(number);
break;
}
}
}
位置值集在您的范围(n)
之间具有非重复随机数答案 2 :(得分:1)
取两个全局变量
int nextQuestion;
List<Integer> posList;
然后初始化它:
private void initRandomLogic() {
nextQuestion = 0;
posList = new ArrayList<>();
for(int i=0;i<questions.length;i++)
posList.add(i);
Collections.shuffle(posList);
}
private int getRandomPosition() {
return posList.get(nextQuestion++);
}
希望能帮到你!
答案 3 :(得分:1)
创建一个问题列表并将其随机播放(通过Collections.shuffle())一次以获得随机的问题顺序:
List<String> randomQuestionList = new ArrayList<>();
randomQuestionList.addAll(Arrays.asList(questions));
Collections.shuffle(randomQuestionList);
现在你有一个随机排列的问题列表。
注意我在您的代码中看到,您在单独的数组中得到了答案。要使这个随机解决方案适合您,您需要一起提问和解答。实现这一目标的最佳方法可能是创建一个包含问题和答案的问题类。然后,您可以随机解决问题,并且仍然可以得到每个问题的答案。
class Question {
String question;
String[] answers;
}
List<Question> randomQuestionList ...