簡體   English   中英

我如何從數組列表中選擇4種不同的文本而無需重新排列

[英]How do I pick 4 different texts from an arraylist without repitition

該應用程序運行正常,但按鈕上的答案有時會重復出現。

如何防止這種情況發生?

到目前為止,這是嘗試過的。

public class RiddleGuessActivity extends AppCompatActivity {
    TextView riddleQuestionTextView;
    Button btn1, btn2, btn3, btn4;

    ArrayList<String> riddles = new ArrayList<>();
    ArrayList<String> answers = new ArrayList<>();
    int locationOfCorrectAnswers = 0,incorrectAnswers;
    int riddleCounter = 0;
    ArrayList<String> options = new ArrayList<>();

    public void generateRiddles () {

        riddles.add("I kiss my mother before i die. What am i ?");
        riddles.add("It is greater than God and more evil than the devil. The poor have it, the rich need it and if you eat it you'll die. What am i ?");
        riddles.add("It walks on four legs in the morning, two legs at noon and three legs in the evening. What am i ?");
        riddles.add("I am the beginning of the end, and the end of time and space. I am essential to creation and i surround everyplace. What am i ?");
        riddles.add("What always runs but never walks, often murmurs, never talks, has a bed but never sleeps, has a mouth but never eats. What am i ?");
        riddles.add("At night they come without being fetched, By day they are lost without being stolen. What am i ?");
        riddles.add("The one who makes it, sells it. The one who buys it, never uses it. The one that uses it never knows that he's using it. What am i ?");
        riddles.add("The more you have of it, the less you see. What am i ?");
        riddles.add("I am always hungry, i must be fed, the finger i touch will soon turn red. What am i ?");
        riddles.add("If you break me, i do not stop working, if you touch me, i may snared, if you lose me, nothing will matter. What am i ?");

        answers.add("Matches");
        answers.add("Nothing");
        answers.add("Man");
        answers.add("Letter E");
        answers.add("River");
        answers.add("The Stars");
        answers.add("A Coffin");
        answers.add("Darkness");
        answers.add("Fire");
        answers.add("Heart");

        Random random = new Random();

        riddleQuestionTextView.setText(riddles.get(riddleCounter));

        locationOfCorrectAnswers = random.nextInt(4);

        options.clear();

        for (int i = 0; i < 4; i++) {
            if (i == locationOfCorrectAnswers) {
                options.add(answers.get(riddleCounter));
            }else {
                incorrectAnswers = random.nextInt(riddles.size());
                while (incorrectAnswers == riddleCounter) {
                    incorrectAnswers = random.nextInt(riddles.size());
                }
                options.add(answers.get(incorrectAnswers));
            }
        }
        btn1.setText(options.get(0));
        btn2.setText(options.get(1));
        btn3.setText(options.get(2));
        btn4.setText(options.get(3));
    }

嘗試這個

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

        if (i == locationOfCorrectAnswers && 
                    !options.contains(answers.get(riddleCounter))) {

                options.add(answers.get(riddleCounter));

        }else {

            incorrectAnswers = random.nextInt(riddles.size());

            while (incorrectAnswers == riddleCounter) {

                incorrectAnswers = random.nextInt(riddles.size());
            }

             if(!options.contains(answers.get(incorrectAnswers)))
                   options.add(answers.get(incorrectAnswers));
             else --i;
        }

    }

應該防止重復

編輯:添加了完整的代碼

EDIT2:修復了indexOutOfBounds異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM