繁体   English   中英

如何在循环时修复我的随机数?

[英]How do I fix my random number while loop?

我需要做的是制作一个数字生成器,它在生成 10 时停止并显示在达到 10 之前尝试了多少次。 为此,我还必须仅使用 while 循环。 这是我现在的代码:

public static int RandomOccurrence()
{               
  int randNumber = (int)(Math.random()*20 + 1);
  int count = 0;

  while(randNumber != 11){
    System.out.println("The number generated is " + randNumber);
    count = count + 1;
  }
  return count;
}

这是函数调用:

int number = RandomOccurrence();
    System.out.println("It took " +number +" tries before 10 was generated");   
        
    System.out.println();
    System.out.println();

但是当我运行代码时,它会无限地打印“生成的数字为 2”。

这是您的代码的固定版本,主要涉及将获取随机数的行移动到while循环中:

public static int RandomOccurrence()
{
    int randNumber = 0;
    int count = 0;

    while(randNumber != 10){//I changed the 11 to 10 because you said you wanted to stop at 10
        randNumber = (int)(Math.random()*20 + 1);//added
        System.out.println("The number generated is " + randNumber);
        count = count + 1;
    }
    return count;
}

System.out.println(RandomOccurrence());

示例结果:

The number generated is 1
The number generated is 4
The number generated is 20
The number generated is 19
The number generated is 10
5

我真的更喜欢向用户指出作业问题的答案,而不是给他们提供有效的代码。 因为我们试图“教人钓鱼”。

原始代码的问题在于它必须在while循环中生成另一个随机数 最简单的方法是复制并粘贴用于生成第一个函数调用的相同函数调用。

PS:您现在很快就会看到“有不止一种方法可以做到!”

每次执行 while 循环时,您都应该更新随机数:所以 randNumber = (int)(Math.random()*20 + 1); 应该在循环内

public static int RandomOccurrence(){               
    int count = 0;
    int randNumber = 0;

    while(randNumber != 11){
        randNumber = (int)(Math.random()*20 + 1);
        System.out.println("The number generated is " + randNumber);
        count = count + 1;
    }
    return count;
}

public static void main(String...args){
    int number = RandomOccurrence();
    System.out.println("It took " +number +" tries before 10 was generated");   
        
    System.out.println();
    System.out.println();
}

我希望我能帮上忙

这是一个 1-liner:

long count = IntStream.generate(() -> (int)(Math.random() * 20 + 1))
    .takeWhile(i -> i != 11).count();

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM