为什么我的Java程序不产生固定数量的随机数?

时间:2018-10-02 05:06:32

标签: java

我对Java还是很陌生,大多数时候我都不知道我在做什么。我正在尝试编写一个代码,您可以在其中选择要生成的数量,所生成的随机数的最大和最小数量。

它会无限生成最大和最小范围内的数字。

import java.util.Scanner;
import java.util.Random;
public class random_unfinished {
  public static void main(String[] args) {
    int numofgen, max, min, generated, avg, i;
    Scanner scan = new Scanner(System.in);
    Random random = new Random();
    System.out.println("How many numbers would you like to     generate?");
    numofgen = scan.nextInt();
    System.out.println("What is the maximum number?");
    max = scan.nextInt() + 1;
    System.out.println("What is the minimum number?");
    min = scan.nextInt();
    for (int value = min; value <= max;) {
      value = random.nextInt(max - min) + min;
      System.out.println("numbers are " + value);
    }
  }
}

2 个答案:

答案 0 :(得分:2)

好的,所以for循环是有问题的。

习惯于此:

for (int i = 0; i < n; i++) {

如果您的for循环看起来不是这样,除非您非常高级,否则您可能做错了。

以您的情况为例:

    for (int value = min; value <= max;) {

您将一个名为value的变量初始化为最小值。 您要继续进行的测试是值是否小于最大值(除非min大于max,否则它将为max) 在执行循环主体之后,您每次执行的操作都不是。

因此,您可以无限循环。

与黄金标准比较:

for (int i = 0; i < n; i++) {

将变量i初始化为0 它是否继续的测试是如果我小于某个数字n 每次执行循环主体后,它都会递增i。

Ergo-除非我们对i进行任何调皮的操作(或使用break或return提前退出),否则我们将重复循环主体n次。

cf:

    for (int value = min; value <= max; [_____you forgot this bit____] ) {

答案 1 :(得分:0)

问题是您的for循环将从minmax。另外,它缺少update子句,这意味着value永远不会改变。因此,您将陷入无限循环。

相反,您应该从0转到numofgen,并确保每次将i更新1。这样会生成用户希望的数量。

import java.util.Scanner;
import java.util.Random;
public class random_unfinished {
  public static void main(String[] args) {
    int numofgen, max, min, generated, avg, i;
    Scanner scan = new Scanner(System.in);
    Random random = new Random();
    System.out.println("How many numbers would you like to     generate?");
    numofgen = scan.nextInt();
    System.out.println("What is the maximum number?");
    max = scan.nextInt() + 1;
    System.out.println("What is the minimum number?");
    min = scan.nextInt();
    for (int i = 0; i < numofgen; i++) {
      value = random.nextInt(max - min) + min;
      System.out.println("numbers are " + value);
    }
  }
}