如何在两个给定的整数之间随机生成所有数字而不在Java中重复?

时间:2015-10-26 08:48:14

标签: java random

我找到了关于如何生成随机数的答案但是如何生成范围内的所有数字而没有Java中的重复。如果您有解决方案,请分享。下面是我做的,但它只是随机生成数字。我需要打印范围内的所有数字而不重复!

package com.company;

import java.util.*;


public class RandomizeNumbers {

    public static void main(String[] args) {

        //Create Scanner
        Scanner userInput = new Scanner(System.in);

        //Ask for numbers N and M
        System.out.println("Please enter two numbers and the program will randomize the numbers between them. " +
                "The first number N must be bigger or equal to the second number M");
        System.out.println("Please enter the first number N");
        int n = userInput.nextInt();
        System.out.println("Please enter the second number M");
        int m = userInput.nextInt();
        Random randomGenerator = new Random();
        int difference = n - m;
        //Randomize the numbers
        if (m<=n){
            for(int i = 0; i<= difference; i++ ) {
                int randomInt = randomGenerator.nextInt(n - m + 1) + m;
                System.out.println(randomInt);
            }
        }
            else{
            System.out.println("Please enter M less or equal to N");
        }

    }
}

5 个答案:

答案 0 :(得分:2)

您需要产生随机排列,请参阅此链接How to generate a random permutation in Java?

答案 1 :(得分:1)

有很多方法可以达到这个目的,假设您想要在 A B 之间使用50个数字,然后使用java.util.Set,因为{{1} “忽略”重复的值:以下代码片段更好地描述它:

collection

小心,不要陷入无限循环。 (A和B之间只有“B-A”可能的整数选项,因此Set<Integer> setA = new HashSet<Integer>(); Random r = new Random(System.currentTimeMillis()); int low = 10; int high = 100; int rnd = r.nextInt(high - low + 1) + low; int maxCount = 50; while (setA.size() < maxCount ) { //<--how many random numbers do you need? rnd = r.nextInt(high - low + 1) + low; setA.add(rnd); }

答案 2 :(得分:1)

您可以将生成的数字存储在一个数组中。然后在生成下一个数字后,检查是否有数字或数字。

答案 3 :(得分:0)

我建议你做的是创建一个List,然后将其改组。

ArrayList<Integer> list = new ArrayList();

int high = 20;
int low = 10;

for(int i = low; i <= high; ++i)
 list.add(i);

Collections.shuffle(list);

然后创建一个函数,每次都获得一个随机的唯一编号。

static int index = 0;

public int roll(ArrayList<Integer> list)
{
  return  list.get(index ++);
}

答案 4 :(得分:0)

您可以将所有数字放在n&amp;之间m进入一个列表,然后使用Collections.shuffle(list)使数字在列表中随机排序。

if (difference > 0) {
        List<Integer> integers = new ArrayList<>();
        for (int i = 0; i <= difference; ++i) {
            integers.add(m + i);
        }

        Collections.shuffle(integers);

        for (Integer randNum : integers) {
            System.out.print(randNum + "\t");
        }
        System.out.println();
    } else {
        System.out.println("Please enter M less or equal to N");
    }