使用两个不同的随机数选项初始化变量时遇到问题

Having trouble with initializing a variable with two different options of random numbers

我正在尝试创建一个 MasterCard 卡号生成器(我知道这有阴暗面,但这只是为了 class 我保证!:))卡号必须以 51-55 之间的数字开头(含)或 222100-272099(含)之间的数字。有没有办法将变量设置为其中之一?这是我编写的代码行,但它返回了以下错误消息:“错误:二元运算符‘||’的错误操作数类型".

int firstNum = randGen.nextInt(5) + 51 || randGen.nextInt(50000) + 222100;

这个数字最终会成为一个 16 长的字符串,遵循 Luhn 公式,所以如果有更简单的方法this/troubleshoot,请告诉我!

一个干净的解决方案是生成一个包含两个随机数的数组,然后随机选择其中一个,如下所示:

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random randGen = new Random();
        int[] nums = new int[2];
        nums[0] = randGen.nextInt(5) + 51;
        nums[1] = randGen.nextInt(50000) + 222100;

        // Assign one of the random numbers to firstNum
        int firstNum = nums[randGen.nextInt(2)];
        System.out.println(firstNum);
    }
}

您可以将变量设置为这些值中的任何一个,但一次只能设置一个。你需要做出选择。您可以使用已有的随机数生成器随机选择。

if (randGen.nextBoolean())
    firstNum = randGen.nextInt(5) + 51;
else 
    firstNum = randGen.nextInt(50000) + 222100;

您只能在布尔表达式之间使用 || 运算符。另一个具有不同分布的简单解决方案是

        int firstNum = randGen.nextInt(50005) + 51;
        if (firstNum > 55){ firstNum += (222100-56);}

在这种情况下,获得 53 或 222111 的概率大致相似,但获得 222100 和 272099 之间的数字的概率高于 51 和 55 之间的数字。