-3

我正在使用以下代码,它随机生成数字,但问题是,我无法弄清楚为什么它不生成数字1

        int ran, g, d, col, ran2;
        double y = 1000 * (Double.parseDouble(t2.getText()));
        int x = (int) y;
        d = Integer.parseInt(anum.getText());
        double c = 10;
        int prevrandom = Integer.parseInt(lnum.getText());
        lnum.setText("");
        lnum.setVisible(true);
        for (g = 0; g==0;) {
            d = Integer.parseInt(anum.getText());
            ran = (int) (Math.random() * (c)); // Random Number Creation Starts
            if (ran > (c / 10)) {
                g = 1;
                ran2 = ((int) (Math.random() * 10)) % 2;
                if (ran2 == 1) {
                    ran = ran * (-1);
                }
                d = d + ran;
                if (d < 0) {
                    ran = ran * (-1);
                    d = d + (2 * ran);
                }
                int a = d - ran;
                if(prevrandom==ran){
                    g=0;
                }
                if(g==1){
                    lnum.setText("" + ran);
                }
            }
        }

我从某个地方调用这个函数(按钮)。当总和('a')变为 4 时,问题就出现了,根据我的条件,它不应该允许除 'one' 之外的任何数字,因此它会进入无限循环。

我说的是ran变量。乘以where是一个正整数后Math.random得到的。10^xx

ran2是一个值为 1 或 0 的数字。当我将 Math.Random 与 10 相乘时,得到一个 1 位数字,然后将其与 2 相加。

这是一个 14 岁的男孩,刚接触 java。如果有人能在这里提供帮助而不是劝阻,那就太好了。

4

3 回答 3

3

查看Javadoc

返回一个带正号的双精度值,大于或等于 0.0 且小于 1.0。返回值是伪随机选择的,从该范围(近似)均匀分布。

如果您需要整数随机数,最好使用java.util.Random。要在范围内(包括)生成一个随机整数 a..b,您可以使用

Random random=new Random();
int rnd=a+random.nextInt(b-a+1);
于 2013-10-02T09:22:36.353 回答
1

问题出在代码上

 if (ran > (c / 10)) {

创建的随机数甚至等于一;但在这里,由于符号“>”,它被拒绝了。请改用“>=”。

于 2013-10-02T09:41:19.667 回答
0

跑 = (int) (Math.random() * (c)); 其中 c 是从 10 到 10^x

这可以是 1,如下所示。

int c = 1000;
for (int i = 0; i < 1000; i++) {
    int count = 0;
    int ran;
    do {
        ran = (int) (Math.random() * (c)); // where c is from 10 to 10^x
        count++;
    } while (ran != 1);
    System.out.println("count: " + count);
}

有时像打印

count: 1756
count: 86
count: 839
count: 542
count: 365
....
count: 37
count: 2100
count: 825
count: 728
count: 1444
count: 1943

它在不到一秒的时间内返回1一千次。

于 2013-10-02T09:30:29.117 回答