【问题标题】:Incorrect random number output issue in Java (Android Studio)Java(Android Studio)中不正确的随机数输出问题
【发布时间】:2016-10-19 18:06:54
【问题描述】:

我有一个名为“loadG1”的随机数变量,在用户在 EditText 上按 Enter 后输出。下面显示的 coe 底部有一些 if 语句,目的是根据用户的分数确定 loadG1 的长度(以数字表示)。每次输入与 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();

如果有人能告诉我导致此错误的原因以及解决方法,我将不胜感激。提前致谢。

【问题讨论】:

标签: java android android-studio random


【解决方案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 && 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);
    }

【讨论】:

  • 我相信这会奏效,所以我尝试了以下方法(显示在后期编辑中),但对收到相同的结果感到失望。
  • @User44 它应该按预期工作。现在有什么问题?
  • 和以前一样的问题。我也期望它能够完美运行,但在用户获得 3 分之前,我仍然会得到一些 6 位数的数字。我不太确定为什么会这样。
  • 那是因为您在生成随机编号后添加了 10000。所以如果生成的 no 大于 89999 那么它将是一个 6 位数字
  • 你的意思是generateG1.nextInt(99999)+10000;?我认为将最小值设置为 10000,就像 + 之后的所有其他数字一样。
猜你喜欢
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多