我使用以下代码,它会随机生成数字,但问题是,我无法弄清楚为什么它不生成数字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.random
与10^x
相乘后得到的结果x
为正整数。
这里ran2
是一个值为1或0的数字。当我将Math.Random乘以10时,它给出1位数字,然后用2来修改它。
这是一个刚接触java的14岁男孩。在这里帮助而不是劝阻的人会很棒。
答案 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
一千次。