使用java创建一个4位数的随机数,不带数字重复

kak*_*ali 8 java random numbers

我用java创建了一个代码来创建一个没有重复数字的随机4位数字,我写的代码如下: -

Random r = new Random();
d1 = r.nextInt(9);
d2 = r.nextInt(9);
d3 = r.nextInt(9);
d4 = r.nextInt(9);
while(d1==d2||d1==d3||d1==d4||d2==d3||d2==d4||d3==d4)
{
    if(d1==d2||d2==d3||d2==d4)
    {
        d2 = r.nextInt(9);
    }
    if(d1==d3||d2==d3||d3==d4)
    {
        d3 = r.nextInt(9);
    }
    if(d1==d4||d2==d4||d3==d4)
    {
        d4 = r.nextInt(9);
    }
}   
System.out.println(d1+""+d2+""+d3+""+d4);
Run Code Online (Sandbox Code Playgroud)


以下是测试用例(由...生成System.out.println(R1+""+R2+""+R3+""+R4);)如下: -

 0123 |  OK as required
 1234 |  OK as required
 2123 |  not OK because 2 is present more than one time 
 9870 |  OK as required
 0444 |  not OK because 4 is present more than one time
Run Code Online (Sandbox Code Playgroud)


现在我的问题是,如果有更好的方法可以做到这一点.如果我能以某种方式增强它?

Jer*_*vel 17

创建一个从0到9的整数列表,将其洗牌并提取前4个.

public static void main(String[] args) {
    List<Integer> numbers = new ArrayList<>();
    for(int i = 0; i < 10; i++){
        numbers.add(i);
    }

    Collections.shuffle(numbers);

    String result = "";
    for(int i = 0; i < 4; i++){
        result += numbers.get(i).toString();
    }
    System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)

有一些丑陋的字符串到int的对话正在进行,但你明白了.根据您的使用情况,您可以看到所需的内容.


Rob*_*Rob 5

几种方法:

  1. 使用Set保持数字并继续添加随机数字,直到该集合中包含四个值.

  2. 创建一个值为0-9的数组.对阵列进行随机播放并获取前四个值.

如果性能很重要,您将需要尝试几种不同的方法,看看哪种方法更快.