java - 为什么在我专门阻止这种情况后,一个随机 int 会变得与另一个随机 int 相同?

标签 java android

在我的程序中,生成了两个随机数。其中一个 (rbvalue) 介于 0 和 8 之间。另一个 (loadG4) 介于 0 和 9 之间。如果 rbvalue == 为 loadG4,它将被设置为 9。这样,两个数字永远不可能相等。由于某种原因,第一次单击按钮后代码存在缺陷(每次单击按钮后程序循环)。在代码中可能存在多余的不相关信息,无论如何我都会将其放入,以防与我们关注的随机生成和比较发生冲突。这是代码:

Random random = new Random();
int rbselector = random.nextInt(4);    //These three are declared outside of onCreate.
int loadG4 = random.nextInt(10);

for (int allrbA = 0; allrbA < 4; allrbA++) {
    int rbvalue = random.nextInt(9);
    if (rbvalue == loadG4) {
        rbvalue = 9;
    }
    selectrb[allrbA].setText("" + rbvalue);
}
selectrb[rbselector].setText("" + loadG4);

for (int allrbA = 0; allrbA < 4; allrbA++) {
    selectrb[allrbA].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button clicked = (Button)v;
            String clickVal = (String)clicked.getText();
            int finalClick = Integer.valueOf(clickVal);

            if (finalClick == loadG4) {
                score++;
                for (int allrbA = 0; allrbA < 4; allrbA++) {
                    int rbvalue = random.nextInt(9);
                    loadG4 = random.nextInt(10);
                    if (rbvalue == loadG4) {
                        rbvalue = 9;
                    }
                    selectrb[allrbA].setText("" + rbvalue);
                }
                number.setText("" + loadG4);
                rbselector = random.nextInt(4);
                selectrb[rbselector].setText("" + loadG4);
            }
        }
    });
}

提前非常感谢。

编辑:尝试不同的方法是行不通的。这已经过测试,看来问题一定来 self 的代码中的其他内容,但我不确定它是什么。

最佳答案

我不完全确定我是否理解你的问题,但我的理解是你有两个整数,你希望它们都是随机生成的,一个在 0 到 9 之间,另一个在 0 到 8 之间;这些数字永远不应该等于同一件事。另外,我在编写解决方案时假设 .nextInt() 是独占的,但是您应该在 java 文档中确认这一点。

这是我解决这个问题的方法:

Random r = new Random();
int a = r.nextInt(10);
int b = r.nextInt(9);

while(a==b)
      b = r.nextInt(9);

这只是生成两个随机 int,如果它们彼此相等,将继续随机生成 int b 的值,直到它不等于 int a。

关于java - 为什么在我专门阻止这种情况后,一个随机 int 会变得与另一个随机 int 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833194/

相关文章:

java - BufferedReader 和 process.getOutputStream()

java - 在 MongoDB + Java 中定义最大连接池大小

java - 如何为 MyLocationOverlay 中的 "you are here"点使用自定义位图?

java - 当 location==null 时更改按钮的可见性

java - 使用 Kotlin 在 android 中声明 UI 组件的最佳方法是什么?

java - 找到绕过多个市场的最短和最便宜的路径

java - Spring Boot应用程序中的sessionFactory不会创建

android - 通过 Intent 打开浏览器并发布 PayPal 数据

android - 从某个点开始解析字符串

android - 将 html 内容呈现为动态 "pages"