Java 若要查看是否已生成下一个随机数,如果已生成,请放弃该随机数并继续再次生成,直到全部生成完成。版本测试#1对我来说很好(在通过对象[]交换字符串[]之后),并且没有生成任何重复项。您的测试#1在运行时必须引发异常。不知怎的,这被吞没了,你最终还是看到了旧的输
Java 若要查看是否已生成下一个随机数,如果已生成,请放弃该随机数并继续再次生成,直到全部生成完成。版本测试#1对我来说很好(在通过对象[]交换字符串[]之后),并且没有生成任何重复项。您的测试#1在运行时必须引发异常。不知怎的,这被吞没了,你最终还是看到了旧的输,java,arrays,list,collections,random,Java,Arrays,List,Collections,Random,若要查看是否已生成下一个随机数,如果已生成,请放弃该随机数并继续再次生成,直到全部生成完成。版本测试#1对我来说很好(在通过对象[]交换字符串[]之后),并且没有生成任何重复项。您的测试#1在运行时必须引发异常。不知怎的,这被吞没了,你最终还是看到了旧的输出。您是否在某种web应用程序中运行此功能(我注意到“”?)直接从命令行运行会更好。由于范围为1-12,因此可能会出现一些重复。想给我们展示一下你是如何将它们随机化的吗?@asgs-编辑了一篇文章,添加了一些我已经写过的代码tried@katu
若要查看是否已生成下一个随机数,如果已生成,请放弃该随机数并继续再次生成,直到全部生成完成。版本测试#1对我来说很好(在通过对象[]交换字符串[]之后),并且没有生成任何重复项。您的测试#1在运行时必须引发异常。不知怎的,这被吞没了,你最终还是看到了旧的输出。您是否在某种web应用程序中运行此功能(我注意到“
”?)直接从命令行运行会更好。由于范围为1-12,因此可能会出现一些重复。想给我们展示一下你是如何将它们随机化的吗?@asgs-编辑了一篇文章,添加了一些我已经写过的代码tried@katura,就像我说的1-12是一个很小的范围,会有重复的。您可以做的是检查下一个随机数是否已经生成,如果已经生成,则放弃它并继续再次生成,直到全部生成完成。版本测试#1对我来说很好(在通过对象[]交换字符串[]之后),并且没有产生任何重复项。您的测试#1在运行时必须抛出异常。不知怎的,这被吞没了,你最终还是看到了旧的输出。您是否在某种web应用程序中运行此功能(我注意到“
”?)直接从命令行运行会更好。我也尝试过这种方法…我现在将在我的帖子中附加一段测试代码。从字符串[]更改为Ojbect[]在我的测试片段中得到了我想要的结果。@katura有什么原因吗?我也尝试过这个方法…我现在将在我的帖子中附加一个测试代码片段。在我的测试片段中从字符串[]更改为Ojbect[]得到了我想要的结果。@katura有什么原因吗?我跟随了你帖子中的链接,该方法给出了我想要的结果。我希望我也能把你的答案标记为“正确”!我关注了你帖子中的链接,这种方法给了我想要的结果。我希望我也能把你的答案标记为“正确”!有趣…一些我以前从未尝试过的东西,谢谢你发布。有趣…一些我以前从未尝试过的东西,谢谢你发布。创建一个坏的比较器是一个非常糟糕的主意,没有必要;只需使用用于此目的的库(Collections.shuffle())。@kevin bourrillion为什么?你能提供你的理由和他们的来源吗?这真的不是很明显,它是更好的只是调用
洗牌
,而不是编写所有的代码?创建一个坏的比较器是一个非常坏的主意,没有必要;只需使用用于此目的的库(Collections.shuffle())。@kevin bourrillion为什么?你能提供你的理由和他们的来源吗?这真的不是很明显,最好只调用shuffle
,而不是编写所有的代码?如果他想要的数字少于n个,这将非常有用[m,m+n)。当然,使用像LinkedHashSet这样的保序集。如果他希望[m,m+n]范围内的数字少于n,这将非常有用。当然,使用像LinkedHashSet这样的保序集。
ArrayList<Integer> list = new ArrayList<Integer>(10);
for(int i = 0; i < 10; i++)
{
list.add(i);
}
Collections.shuffle(list);
String[] randomNumbers = (String[])list.toArray();
for(int i = 0; i < 10; i++)
{
out.print(randomNumbers[i]+"<br>");
}
int max = 12;
int min = 1;
int randomNumber = 0;
String str_randomNumber = "";
for(int i=0; i<10; i++) {
//int choice = 1 + Math.abs(rand.nextInt(11));
int choice = min + (int)(Math.random() * ((max - min) + 1));
out.print("chose = "+choice+"<br>");
}
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= 12; i++) {
list.add(i);
}
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Math.random() > 0.5 ? 1 : -1;
}
);
Integer[] array = list.toArray(new Integer[list.size()]);
public static int randomInteger(int min, int max) {
Random rd = new Random();
return rd.nextInt((max - min) + 1) + min;
}
public static Set<Integer> makeRandomSet(int howManyNumber, int startNumber, int endNumber){
Set<Integer> integerSet = new HashSet<>();
boolean couldBeAdded = false;
for(int i=0; i< howManyNumber; i++) {
while (!couldBeAdded) {
Integer randomInt = randomInteger(startNumber, endNumber);
couldBeAdded = integerSet.add(randomInt);
}
couldBeAdded = false;
}
return integerSet;
}
public static void main(String[] args) {
Set<Integer> randomSet = makeRandomSet(6, 1, 54);
System.out.println(randomSet);
}