如何使random.nextInt()仅在生成其他数字时重复已生成的数字

时间:2016-10-25 15:41:03

标签: android

假设我想生成0到5之间的数字,我想让random.nextInt(5)首先生成所有数字,然后再重复它们,例如0,3,1,5,2,4然后重复但不是数字是(4)。我对任何数字的生成方式都没问题。我只知道如何随机化一切。

2 个答案:

答案 0 :(得分:0)

    List<Integer> numbers = Arrays.asList(0, 1, 2, 3, 4, 5);
    Collections.shuffle(numbers);
    for (int n : numbers) {
        // numbers will be in random order here
    }

答案 1 :(得分:0)

您可以通过分两部分来解决问题 1.生成所有不到6个 2.生成与前一个不同的随机数。

  
      
  1. 创建一个布尔数组,用于跟踪尚未生成的数组。
  2.   
  3. 在int上创建以跟踪之前没有生成的内容。
  4.   
  5. 创建一个布尔变量,以便轻松跟进解第二部分。因此,一旦所有数字在范围内生成,您就不需要每次检查。
  6.   
boolean[] arrRange= new boolean[6];
boolean isRangeGenerated = false;
int lastNoGenerated = 0;
Random rand;

生成数字的方法。

private void generateNumber() {
    if(!isRangeGenerated){  //this is 1st part of solution
        int pos = rand.nextInt(6);
        while(arrRange[pos]){
            pos = rand.nextInt(6);
        }
        lastNoGenerated = pos;
        arrRange[pos]=true;

        isRangeGenerated = checkAllNumbergenrated(arrRange);
        System.out.println(pos);
    }else {                    //this is 2nd part of solution
        int newNum = rand.nextInt(6);
        while(newNum == lastNoGenerated){
            newNum = rand.nextInt(6);
        }
        lastNoGenerated = newNum;
        System.out.println(newNum);
    }
}

检查是否生成范围内的所有数字的方法

private boolean checkAllNumbergenrated(boolean[] arrRange) {

    for(int i=0;i<arrRange.length;i++){
        if(!arrRange[i]){
            return false;
        }
    }
    return true;
}