Java中的Math.Random函数

时间:2016-08-23 19:04:54

标签: java

我使用下面的Java代码使用math.random函数生成随机数

public class randomnumber {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int num = generatenumber(35);
        while(num>0 & num < 35) {
            System.out.println(num);
            break;
        }
        //System.out.println("greater");
    }

    public static int generatenumber(int n) {
        double d= Math.random() * 100;

        int x = (int)d;
        //System.out.println(x);
        return x;
    }
} 

但是,当数字大于35时,输出不会显示。我希望程序打印直到num小于35.我应该更改哪些内容才能执行此操作?

澄清:

每次Math.random()生成一个随机数。在第一次调用时,如果生成的数字大于35,那么我希望再次调用此函数“生成数字”,以便下次如果数字小于35,则打印该数字。

3 个答案:

答案 0 :(得分:1)

您写道:

int num=generatenumber(35);
while(num>0 & num < 35)
{
    System.out.println(num);
    break;
}

您的意思是多次生成和测试,但事实上,根据num的值,您在循环中传递零次或一次。

根据您的&#34;规格&#34;正确的代码是

int num;
while(true)
{
    num = generatenumber(35);
    System.out.println(num);

    if (num>0 && num < 35)  // note the double &&: logic and not arithmetic
    {

    break;
    }
}

一般说明:虽然带有条件的循环大部分时间比使用true更复杂。您必须考虑初始化和终止条件,有时是相同的。太多的复制/粘贴和错误...

使用do/while

,shmosel建议更好
int num;
do
{
    num = generatenumber(35);
    System.out.println(num);        
}
while (num>0 && num < 35);  // note the double &&: logic and not arithmetic

答案 1 :(得分:1)

有三个错误:

  1. 你应该使用&amp;&amp;而不是&amp ;.这两个运营商完全不同。
  2. 行&#34; int num = generatenumber(35);&#34;也应该在里面。
  3. 您需要删除break语句。

答案 2 :(得分:0)

您可以使用以下代码。

public static void main(String[] args) {
    int num = ThreadLocalRandom.current().nextInt(100);
    for (; num > 35; num = ThreadLocalRandom.current().nextInt(100)) {
        System.out.println(num + " is ignored");
    }
    System.out.println(num + " is ok");
}