Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使random.nextInt()仅在生成其他数字时重复已生成的数字_Android - Fatal编程技术网

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

Android 如何使random.nextInt()仅在生成其他数字时重复已生成的数字,android,Android,假设我想生成从0到5的数字,我想随机生成。nextInt(5)首先生成所有数字,然后重复其中任何一个,例如0,3,1,5,2,4,然后重复,但不使用数字(4)。我对这些数字是如何产生的一点都不介意。我只知道如何随机化一切。列出数字=数组。asList(0,1,2,3,4,5); List<Integer> numbers = Arrays.asList(0, 1, 2, 3, 4, 5); Collections.shuffle(numbers); for (

假设我想生成从0到5的数字,我想随机生成。nextInt(5)首先生成所有数字,然后重复其中任何一个,例如0,3,1,5,2,4,然后重复,但不使用数字(4)。我对这些数字是如何产生的一点都不介意。我只知道如何随机化一切。

列出数字=数组。asList(0,1,2,3,4,5);
    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
    }
收藏。洗牌(数字); 用于(整数n:数字){ //这里的数字将按随机顺序排列 }
您可以通过将问题分为两部分来完成此操作。
1.生成最多6个的所有no
2.生成与前一个不同的随机数

  • 创建一个布尔数组,该数组将跟踪尚未生成的布尔数组
  • 在int上创建以跟踪以前生成的no
  • 创建一个布尔变量,以便轻松跟进解决方案第二部分。因此,当所有数字都在范围内生成时,您不必每次都进行检查
  • 生成数字的方法

    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;
    }
    
    private boolean checkAllNumbergenrated(boolean[]arrRange){
    对于(int i=0;i
    random.nextInt(5)
    请注意域是
    [0,5)
    而不是
    [0,5]
    private boolean checkAllNumbergenrated(boolean[] arrRange) {
    
        for(int i=0;i<arrRange.length;i++){
            if(!arrRange[i]){
                return false;
            }
        }
        return true;
    }