Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Java 用随机数填充int[]_Java_Android_Arrays_Random - Fatal编程技术网

Java 用随机数填充int[]

Java 用随机数填充int[],java,android,arrays,random,Java,Android,Arrays,Random,我制作了一个测验应用程序,它使用int[]数组来设置答案的位置。数组必须用数字0、1、2和3填充,但它们必须随机放置(并且只出现一次)。我唯一能做到的就是这样: public int[] castRanInt(){ int ran_int[] = new int[4]; Random random = new Random(); boolean state = true; ran_int[0] = random.nextInt(4); while (sta

我制作了一个测验应用程序,它使用int[]数组来设置答案的位置。数组必须用数字0、1、2和3填充,但它们必须随机放置(并且只出现一次)。我唯一能做到的就是这样:

public int[] castRanInt(){
    int ran_int[] = new int[4];
    Random random = new Random();
    boolean state = true;
    ran_int[0] = random.nextInt(4);
    while (state) {
        for (int r = 1; r < 4; r++) {
            ran_int[r] = random.nextInt(4);
        }
        state = false;
        for (int a = 0; a < 4; a++) {
            for (int b = 0; b < 4; b++) {
                if (a == b) {
                    continue;
                }
                if (ran_int[a] == ran_int[b]) {
                    state = true;
                }

            }
        }
    }
    return ran_int;
}
public int[]castRanInt(){
int ran_int[]=新int[4];
随机=新随机();
布尔状态=真;
rand_int[0]=random.nextInt(4);
当(州){
对于(int r=1;r<4;r++){
rand_int[r]=random.nextInt(4);
}
状态=假;
对于(int a=0;a<4;a++){
对于(int b=0;b<4;b++){
如果(a==b){
继续;
}
if(ran_int[a]==ran_int[b]){
状态=真;
}
}
}
}
返回运行时间;
}

唯一的问题是,这通常需要在while循环中运行多达100次才能填充阵列。有没有更简单/更快的方法可以做到这一点?

到目前为止,我发现:

public int[] castRanInt(){
    List<Integer> intList = Arrays.asList(new Integer[]{ 0, 1, 2, 3 });
    Collections.shuffle(intList);

    // Convert List<Integer> to int[]
    int[] ret = new int[intList.size()];
    for(int i = 0; i < ret.length; i++) {
        ret[i] = intList.get(i);        
    }

    return ret;
}
public int[]castRanInt(){
List intList=Arrays.asList(新整数[]{0,1,2,3});
集合。洗牌(intList);
//将列表转换为int[]
int[]ret=new int[intList.size()];
对于(int i=0;i
这使用了
集合。shuffle
不幸的是,从
整数[]
转换为
整数[]

并不是一个简单的方法,就像上面说的那样,您需要一个由索引启动的列表,以便可以对其进行shuffle

public List shuffleArray(int size) {
    List<Integer> list = new ArrayList<>();
    for(int i = 0; i < size; i++) {
        list.add(i);
    }
    Collections.shuffle(list);
    return list;
}
public List shufflearlay(整数大小){
列表=新的ArrayList();
对于(int i=0;i
使用
1填充数组;2.3.4
并将其洗牌。您可以使用
collections.shuffle
对集合进行洗牌,而数组可能有一个等价物。