I';我从java程序中得到奇怪的输出
我这里有些奇怪的情况,我想你可以帮助我。我有一个整数数组,里面填充了从1到10的数字。我想从这个数组中生成随机数,并将它保存到另一个int数组中。我使用类Random来选择任何数字,因为Random抛出0,所以我也这样修改它(所以它抛出1到10的数字) 下面的代码确保,若它生成相同的随机数,它将跳过它。这个程序正在运行,我得到了另一个随机排列的数字,从1到10。这就是我想要的。但有时我从1-10中漏掉了一个数字,而我却得到了零。为什么I';我从java程序中得到奇怪的输出,java,random,Java,Random,我这里有些奇怪的情况,我想你可以帮助我。我有一个整数数组,里面填充了从1到10的数字。我想从这个数组中生成随机数,并将它保存到另一个int数组中。我使用类Random来选择任何数字,因为Random抛出0,所以我也这样修改它(所以它抛出1到10的数字) 下面的代码确保,若它生成相同的随机数,它将跳过它。这个程序正在运行,我得到了另一个随机排列的数字,从1到10。这就是我想要的。但有时我从1-10中漏掉了一个数字,而我却得到了零。为什么 int[] numbers = {1,2,3,4,5,6,7
int[] numbers = {1,2,3,4,5,6,7,8,9,10};
int[] usednum = new int[10];
Random rand = new Random();
int randNum;
int min = 1;
for (int x = 0; x<numbers.length; x++) {
for (int i = 0; i<usednum.length; i++) {
randNum = rand.nextInt(numbers.length-min+1) + min;
for (int f = 0; f<usednum.length; f++) {
if (usednum[f] == randNum) {
break;
} else if (usednum[f] == 0) {
usednum[x] = randNum;
}
}
}
}
for (int c = 0; c<usednum.length; c++) {
System.out.println(usednum[c]);
}
int[]数字={1,2,3,4,5,6,7,8,9,10};
int[]usednum=新int[10];
Random rand=新的Random();
int-randNum;
int min=1;
对于(int x=0;xEdit),遵循它并重新写入:
List<Integer> numbers = new LinkedList<Integer>(Arrays.asList(new Integer[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }));
int[] usednum = new int[10];
Random rand = new Random();
int n = numbers.size();
for (int i = 0; i < n; i++) {
int randNum = rand.nextInt(numbers.size());
usednum[i]=numbers.get(randNum);
numbers.remove(randNum);
}
for (int c:usednum) {
System.out.println(c);
}
List number=newlinkedlist(Arrays.asList(新整数[]{1,2,3,4,5,6,7,8,9,10}));
int[]usednum=新int[10];
Random rand=新的Random();
int n=numbers.size();
对于(int i=0;i
编辑-跟随并重新编写:
List<Integer> numbers = new LinkedList<Integer>(Arrays.asList(new Integer[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }));
int[] usednum = new int[10];
Random rand = new Random();
int n = numbers.size();
for (int i = 0; i < n; i++) {
int randNum = rand.nextInt(numbers.size());
usednum[i]=numbers.get(randNum);
numbers.remove(randNum);
}
for (int c:usednum) {
System.out.println(c);
}
List number=newlinkedlist(Arrays.asList(新整数[]{1,2,3,4,5,6,7,8,9,10}));
int[]usednum=新int[10];
Random rand=新的Random();
int n=numbers.size();
对于(int i=0;i
您在整个过程中生成已用数字,所以它不会生成零,只是无法生成它应该生成的值。您在整个过程中生成已用数字,所以它不会生成零,只是无法生成它应该生成的值。如果您的目标只是对一个数字数组进行无序排列,请尝试以下操作:n标题:
Integer[] numbers = {1,2,3,4,5,6,7,8,9,10};
Collections.shuffle(Arrays.asList(numbers));
除非你正在完成一项家庭作业,迫使你以更为手动的方式解决这个问题,否则就使用标准的Java库
由于数组返回了特殊类型的列表
。asList(…)
。请注意,您必须使用整数
数组而不是int
,因此shuffle
方法将更改写入底层的整数
数组.如果您的目标只是洗牌一组数字,请尝试以下方法:
Integer[] numbers = {1,2,3,4,5,6,7,8,9,10};
Collections.shuffle(Arrays.asList(numbers));
除非你正在完成一项家庭作业,迫使你以更为手动的方式解决这个问题,否则就使用标准的Java库
由于数组返回了特殊类型的列表
。asList(…)
。请注意,您必须使用整数
数组而不是int
,因此shuffle
方法将更改写入底层的整数
数组.您是最内部的for
循环仅检查当前随机数是否在usednum[]
数组。而紧靠该数组外部的for
循环只检查总数的10倍。它放弃得太快,因为它只尝试10个随机数。如果所有10个都已使用,则在usednum[]
的插槽中将不会存储任何内容(因此它将是0),尝试添加一个,而
则围绕该循环循环,并摆脱与之无关的最外层for
循环:
for(int i = 0; i<usednum.length; i++) {
while(usednum[i]==0) {
randNum = rand.nextInt(numbers.length-min+1)+min;
for(int f = 0; f<usednum.length; f++) {
if(usednum[f] == randNum) {
break;
} //if
else if (usednum[f] == 0) {
usednum[i] = randNum;
}
}
}
}
for(int i=0;i您是最内部的for
循环仅检查当前随机数是否在usednum[]
数组。而紧靠该数组外部的for
循环只检查总数的10倍。它放弃得太快,因为它只尝试10个随机数。如果所有10个都已使用,则在usednum[]
的插槽中将不会存储任何内容(因此它将是0),尝试添加一个,而
则围绕该循环循环,并摆脱与之无关的最外层for
循环:
for(int i = 0; i<usednum.length; i++) {
while(usednum[i]==0) {
randNum = rand.nextInt(numbers.length-min+1)+min;
for(int f = 0; f<usednum.length; f++) {
if(usednum[f] == randNum) {
break;
} //if
else if (usednum[f] == 0) {
usednum[i] = randNum;
}
}
}
}
for(inti=0;i你有一个for循环太多了
使用i迭代器删除循环,程序将执行您想要的操作
哦,从随机生成器中删除-min+1,-1+1=0你有一个for循环太多了
使用i迭代器删除循环,程序将执行您想要的操作
哦,从随机生成器中删除-min+1,-1+1=0您的数组usednum
在开始时由零组成。在某些情况下,您的程序不会更改初始值,但会在前一行中断:
if(usednum[f] == randNum)
在所有迭代过程中,以相同的值x
x
增量执行此操作,您就有机会更改零值。您的数组usednum
在开始时由零组成。在某些情况下,您的程序不会更改该初始值,但会在前一行中断:
if(usednum[f] == randNum)
在所有迭代过程中,如果使用相同的值x
x
递增,则有机会更改零值。实际上,您从未使用数组的内容numbers
。请尝试将数组更改为类似int[]numbers={10,22,23,42,53,18,7,8,93,10};
。您将获得类似的输出
请描述为什么您的代码不起作用,但没有解决此问题。我想您会希望将代码更改为以下内容:
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] usednum = new int[10];
Random rand = new Random();
int selectedCount = 0;
while (selectedCount < numbers.length) {
int randNum = numbers[rand.nextInt(numbers.length)];
boolean contains = false;
for (int x = 0; x < selectedCount; x++) {
if (usednum[x] == randNum) {
contains = true;
break;
}
}
if (!contains) {
usednum[selectedCount] = randNum;
selectedCount++;
}
}
for (int c = 0; c < usednum.length; c++) {
System.out.println(usednum[c]);
}
int[]数字={1,2,3,4,5,6,7,8,9,10};
int[]usednum=新int[10];
Random rand=新的Random();
int selectedCount=0;
while(selectedCount