简体   繁体   English

随机数生成器问题-Android Studio

[英]Random number generator issue - Android Studio

I have a random number (loadG1) that is outputted after the user presses enter on an EditText. 我有一个随机数(loadG1),在用户在EditText上按Enter键后输出。 I added a few if statements near the end of the timer to ensure that a number of specific digit length is outputted depending on the user's score. 我在定时器末尾添加了一些if语句,以确保根据用户的得分输出一定数量的特定数字长度。 They get a point added each time their input matches loadG1. 每次输入与loadG1匹配时,它们都会添加一个点。 My problem is that sometimes on the outputted randoms before 3 points (>=0), I get a six digit number. 我的问题是,有时在3点(> = 0)之前的输出随机数上,我得到一个六位数的数字。 This is only meant to happen when they have 3 or more points. 只有当他们拥有3个或更多的分数时,才会发生这种情况。 This also happens at other stages, eg: 7 digits meant to be outputted by 8 are instead. 这也发生在其他阶段,例如:取而代之的是要由8输出的7位数字。 The pattern seems to almost work perfectly, but at times one digit more than the limit is outputted for that user's score. 该模式似乎几乎可以完美运行,但有时输出的数字比该用户分数的限制高出一位。 Never one digit less, but either the right amount or sometimes one more. 永远不要少一位数,但要适量,有时多一点。

Here's the code: 这是代码:

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();

Would greatly appreciate it if someone could tell me what's causing this error, and how to resolve it. 如果有人可以告诉我是什么导致了此错误,以及如何解决它,将不胜感激。 Thanks in advance. 提前致谢。

You need to change the conditions. 您需要更改条件。

  1. Either reverse the order of if statements , or 反转if语句的顺序,或者

  2. Add < condition also to if statements. 也将<条件添加到if语句。

And make use of else also. 并利用其他。

        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);
        }

or 要么

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM