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
不是sizemax
。这就是为什么我首先使用了一个列表。是的,我很抱歉,我错了。你的解决方案很好。编辑答案。您不需要直接列出清单。非常感谢您的回复。:)
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();
}