奇怪:从Math.random得到'1'

时间:2013-10-02 09:18:33

标签: java

我使用以下代码,它会随机生成数字,但问题是,我无法弄清楚为什么它不生成数字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);
                }
            }
        }

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

我在谈论ran变量。我将Math.random10^x相乘后得到的结果x为正整数。

这里ran2是一个值为1或0的数字。当我将Math.Random乘以10时,它给出1位数字,然后用2来修改它。

这是一个刚接触java的14岁男孩。在这里帮助而不是劝阻的人会很棒。

3 个答案:

答案 0 :(得分:3)

查看Javadoc

  

返回带有正号的double值,大于或等于   0.0和小于1.0 。返回值是伪随机选择的,具有来自该范围的(近似)均匀分布。

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

Random random=new Random();
int rnd=a+random.nextInt(b-a+1);

答案 1 :(得分:1)

问题在于代码

 if (ran > (c / 10)) {

创建的随机数甚至等于1;但这里由于标志'&gt;'它被拒绝了。 请改用'&gt; ='。

答案 2 :(得分:0)

  

ran =(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一千次。