java - 在不重复的范围内生成随机数
问题描述
我正在尝试随机化来自 firebase 的测验问题。我正在尝试生成 0-50 的随机数,将它们添加到数组中,一旦使用该数字,我希望删除该数字。但它永远伴随着重复,这是我用来生成随机的一段代码
我在 oncreate 和测验的 4 个选择按钮上调用 updatequestion()。
public void updateQuestion (){
for (int i = 0; i < 50; i++) {
questionNos.add(i);
}
Random r = new Random();
index = r.nextInt(questionNos.size()-1);
mQuestionNo = questionNos.remove(index);
mQuestionRef = new Firebase("https://class9notes-2808b.firebaseio.com/"+mQuestionNo+"/question");
mQuestionRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String question = dataSnapshot.getValue(String.class);
questiontextview.setText(question);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
mChoice1Ref = new Firebase("https://class9notes-2808b.firebaseio.com/"+mQuestionNo+"/choice1");
mChoice1Ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String choice1 = dataSnapshot.getValue(String.class);
bchoice1.setText(choice1);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
mChoice2Ref = new Firebase("https://class9notes-2808b.firebaseio.com/"+mQuestionNo+"/choice2");
mChoice2Ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String choice2 = dataSnapshot.getValue(String.class);
bchoice2.setText(choice2);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
mChoice3Ref = new Firebase("https://class9notes-2808b.firebaseio.com/"+mQuestionNo+"/choice3");
mChoice3Ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String choice3 = dataSnapshot.getValue(String.class);
bchoice3.setText(choice3);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
mChoice4Ref = new Firebase("https://class9notes-2808b.firebaseio.com/"+mQuestionNo+"/choice4");
mChoice4Ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String choice4 = dataSnapshot.getValue(String.class);
bchoice4.setText(choice4);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
mAnswerRef = new Firebase("https://class9notes-2808b.firebaseio.com/"+mQuestionNo+"/answer");
mAnswerRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String answer = dataSnapshot.getValue(String.class);
mAnswer = dataSnapshot.getValue(String.class);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
if (questionNos == null ){
Intent i = new Intent(qiozphy.this,Score.class);
i.putExtra("Score",mScore);
startActivity(i);
}
}
解决方案
通过改组列表,您可以在列表中随机定位从 0 到 49 的所有数字:
questionNos.clear(); // if not empty
for (int i = 0; i < 50; i++) {
questionNos.add(i);
}
Collections.shuffle(questionNos);
推荐阅读
- java - 单击连接辅助示例代码时未在 Eclipse 上显示?
- c# - C# SharePoint CSOM:更新多行文本字段
- javascript - React Native(Expo):TouchableOpacity onPress 不是函数/未定义
- bootstrap-table - 如何动态添加和更新行元素
- python-3.x - 未找到 Jenkins ImportError 模块
- javascript - AWS 人群表单以禁用默认的“提交”按钮
- vue.js - 如果您不希望它像组件一样呈现,如何在 vue 中显示原始 html 代码
- angular - npm start (angular 11) 抛出错误(未知错误:SyntaxError: Unexpected token '*')
- python - 如何在 python 中处理大型图像数据集?
- bash - 如何在 bash 中获取选项卡自动完成以替换扩展的 $(command)?