Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 在数组中创建不同的值-不会产生预期结果_Java_Arrays - Fatal编程技术网

Java 在数组中创建不同的值-不会产生预期结果

Java 在数组中创建不同的值-不会产生预期结果,java,arrays,Java,Arrays,我试图创建一个数组,它的单元格中有不同的值,但由于某些原因,它有重复的值。我哪里做错了 这是我的密码: package oefarray; public class OefArray { int[] getallenArray,differentArray; public static void main(String[] args) { OefArray arr = new OefArray(); arr.differentArray(10

我试图创建一个数组,它的单元格中有不同的值,但由于某些原因,它有重复的值。我哪里做错了

这是我的密码:

package oefarray;

public class OefArray {

    int[] getallenArray,differentArray;

    public static void main(String[] args) {
        OefArray arr = new OefArray();
        arr.differentArray(10,10);

    }

    public void differentArray(int n, int max) {
        differentArray= new int[n];
        for (int i = 0; i < differentArray.length; i++) {
            int value = (int) (Math.random() * max);
            differentArray[i]= value;
            for (int p: differentArray){
                while (value == p){
                    value = (int) (Math.random() * max);
                }
            }
            differentArray[i]= value;
            System.out.println(differentArray[i]);
        }
    }
}
package-oefarray;
公共级OefArray{
int[]getallenArray,differentitarray;
公共静态void main(字符串[]args){
OefArray arr=新的OefArray();
arr.differentitarray(10,10);
}
公共无效差分阵列(整数n,整数max){
差分数组=新整数[n];
对于(int i=0;i
您没有检查新生成的值是否存在于数组中的任何位置,只是它的值不等于您正在检查的当前值

differentArray= new int[n];
for (int i = 0; i < differentArray.length; i++) {
    int value = 0;
    while(true){
        value = (int)(Math.random()*max);
        boolean found = false;
        for(int p: differentArray){
            if(p==value){
                found = true;
                break;
            }
        }
        if(!found) break;
    }
    differentArray[i] = value;
}

对于使用Java8的未来方法,使用
IntStream.generate
可以产生一些非常简洁的结果。这可能与前面的答案在相同的性能窗口中执行,因此我不断言这更有效。然而,它更具表现力

public int[] differentArray(int length, int maxValue) {
    if(length > maxValue) {
        throw new IllegalArgumentException("The number of possible unique values is smaller than available number of slots for them.");
    }
    final Random random = new Random();
    return IntStream.generate(() -> random.nextInt(maxValue))
                    .distinct()
                    .limit(length)
                    .toArray();
}

您的代码所要做的就是确保
value
的值不同于
differentArray
中的最后一个值。是的,但数组的大小
n
不是size
max
。这就是为什么我首先使用了一个列表。是的,我很抱歉,我错了。你的解决方案很好。编辑答案。您不需要直接列出清单。非常感谢您的回复。:)
public int[] differentArray(int length, int maxValue) {
    if(length > maxValue) {
        throw new IllegalArgumentException("The number of possible unique values is smaller than available number of slots for them.");
    }
    final Random random = new Random();
    return IntStream.generate(() -> random.nextInt(maxValue))
                    .distinct()
                    .limit(length)
                    .toArray();
}