Проблема с генератором случайных чисел — Android Studio

#java #android-studio #random

#java #android-studio #Случайный

Вопрос:

У меня есть случайное число (loadG1), которое выводится после того, как пользователь нажимает enter в EditText. Я добавил несколько операторов if ближе к концу таймера, чтобы гарантировать, что количество определенной длины цифр выводится в зависимости от оценки пользователя. Они получают добавленную точку каждый раз, когда их ввод соответствует loadG1. Моя проблема в том, что иногда при выводе случайных чисел до 3 баллов (> = 0) я получаю шестизначное число. Это должно произойти только тогда, когда у них есть 3 или более очков. Это также происходит на других этапах, например: вместо 7 цифр, которые должны быть выведены 8. Шаблон, кажется, работает почти идеально, но иногда для оценки этого пользователя выводится на одну цифру больше, чем предел. Никогда ни на одну цифру меньше, но либо на нужное количество, либо иногда на одно больше.

Вот код:

 final Random generateG1 = new Random();
            final int loadG1 = generateG1.nextInt(99999) 10000;
            final TextView number = (TextView) findViewById(R.id.number);
            number.setText("" loadG1);

            final CountDownTimer loop = new CountDownTimer(3500, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                }
                @Override
                public void onFinish() {
                    number.setVisibility(View.GONE);
                    final TextView prompt = (TextView) findViewById(R.id.prompt);
                    prompt.setVisibility(View.VISIBLE);
                    prompt.setText(" Enter the number");
                    final EditText input = (EditText) findViewById(R.id.enterAnswer);
                    input.setVisibility(View.VISIBLE);
                    input.setOnKeyListener(new View.OnKeyListener() {
                        @Override
                        public boolean onKey(View v, int keyCode, KeyEvent event) {
                            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                                switch (keyCode) {
                                    case KeyEvent.KEYCODE_ENTER:
                                        Editable answer = input.getText();
                                        int finalAnswer = Integer.parseInt(String.valueOf(answer));
                                        int finalLoadG1 = Integer.parseInt(String.valueOf(number.getText()));
                                        input.setVisibility(View.GONE);
                                        prompt.setVisibility(View.GONE);
                                        if (finalAnswer == finalLoadG1) {
                                            score  ;
                                        }

                                        number.setVisibility(View.VISIBLE);

                                        if (score>=0) {
                                            int loadG1 = generateG1.nextInt(99999) 10000;
                                            number.setText("" loadG1);
                                        }
                                        if (score>=3){
                                            int loadG1 = generateG1.nextInt(999999) 100000;
                                            number.setText("" loadG1);
                                        }
                                        if (score>=6){
                                            int loadG1 = generateG1.nextInt(9999999) 1000000;
                                            number.setText("" loadG1);
                                        }
                                        if (score>=10){
                                            int loadG1 = generateG1.nextInt(99999999) 10000000;
                                            number.setText("" loadG1);
                                        }

                                        input.getText().clear();

                                        start();
  

Был бы очень признателен, если бы кто-нибудь сказал мне, что вызывает эту ошибку и как ее устранить. Заранее спасибо.

Ответ №1:

Вам нужно изменить условия.

  1. Либо измените порядок операторов if, либо

  2. Добавьте < условие также к операторам if.

И также используйте else.

         if (score>=10){
            int loadG1 = generateG1.nextInt(99999999) 10000000;
            number.setText("" loadG1);
        }
        else if (score>=6){
            int loadG1 = generateG1.nextInt(9999999) 1000000;
            number.setText("" loadG1);
        }
        else if (score>=3){
            int loadG1 = generateG1.nextInt(999999) 100000;
            number.setText("" loadG1);
        }else if (score>=0) {
            int loadG1 = generateG1.nextInt(99999) 10000;
            number.setText("" loadG1);
        }
  

или

 if (score>=0 amp;amp; score<3) {
            int loadG1 = generateG1.nextInt(99999) 10000;
            number.setText("" loadG1);
        }
        else if (score>=3 amp;amp; score<6){
            int loadG1 = generateG1.nextInt(999999) 100000;
            number.setText("" loadG1);
        }
        else if (score>=6 amp;amp; score<10){
            int loadG1 = generateG1.nextInt(9999999) 1000000;
            number.setText("" loadG1);
        }
        else if (score>=10){
            int loadG1 = generateG1.nextInt(99999999) 10000000;
            number.setText("" loadG1);
        }