首页 > 解决方案 > 在不重复的范围内生成随机数

问题描述

我正在尝试随机化来自 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);

    }
}

标签: javaandroidrandom

解决方案


通过改组列表,您可以在列表中随机定位从 0 到 49 的所有数字:

questionNos.clear();  // if not empty 
for (int i = 0; i < 50; i++) {
    questionNos.add(i);
}
Collections.shuffle(questionNos);

推荐阅读