为了账号安全,请及时绑定邮箱和手机立即绑定

在没有重复的范围内生成随机数

在没有重复的范围内生成随机数

哈士奇WWW 2021-12-22 20:39:22
我正在尝试从 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) {        }    });  
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

通过改组列表,您可以将 0 到 49 之间的所有数字随机放置在列表中:


questionNos.clear();  // if not empty 

for (int i = 0; i < 50; i++) {

    questionNos.add(i);

}

Collections.shuffle(questionNos);


查看完整回答
反对 回复 2021-12-22
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

使用这段代码


ArrayList<Integer> numbers = new ArrayList<Integer>();   

Random randomGenerator = new Random();

while (numbers.size() < 50) {


    int random = randomGenerator.nextInt(50); // will generate a random number from 0 to 50

    if (!numbers.contains(random)) {  //will check whether the number is repeated or not

        numbers.add(random); //if number is not repeated then it will add it in array

    }

}


查看完整回答
反对 回复 2021-12-22
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您的updateQuestion().


 for (int i = 0; i < 50; i++) {

        questionNos.add(i);

 }

因此,如果questionNos之前电话中已有 49 个问题,updateQuestion()您将收到 99 个问题,其中 98 个问题是重复的,依此类推。


把它移到只被调用一次的地方,比如构造函数。


查看完整回答
反对 回复 2021-12-22
  • 3 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信