有没有办法从数组中选择一个随机字符串,而不再选择该字符串。所有字符串只拾取一次后,程序结束。
这是我当前的系统,publicstaticvoidmain(String[]argv){
//String [] names = new String[5];
String [] names = {"Snoopy", "Donald Duck", "Mickey Mouse", "Little Timmy", "Spiderman"};
//put a list of names in an array
//randomly pick a name out of the array
//how to: randomly pick a number as the index
//range: 0 to the number of names - 1
int n = -1;
int previous = n;
int storing1 = -1;
int storing2 = -1;
int storing3 = -1;
int storing4 = -1;
System.out.println(previous);
while (true) {
System.out.println("Hit \"enter\" to spin");
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
//if (s.equalsIgnoreCase("s")) {
storing4 = storing3;
storing3 = storing2;
storing2 = storing1;
storing1 = previous;
previous = n;
n = (int) (Math.random() * names.length);
if (n == previous || n == storing1 || n == storing2 || n == storing3 || n == storing4) {
System.out.println("This person has already been picked");
break;
}
System.out.print("n = " + n + " ");
String picked = names[n];
System.out.println("Congratulations, " + picked + " was picked!");
}
System.out.println(previous);
System.out.println(storing1);
System.out.println(storing2);
System.out.println(storing3);
System.out.println(storing4); //for my own use, to tell if the storing system works properly
}
我的问题是,控制台将返回“此人已被选中”等等。并不是说节目结束系统不起作用,因为Rest会过早地起作用。
[1]: https://i.stack.imgur.com/54Eef.png [如您所见,程序结束,尽管没有选择所有五个名称,因为它之前选择了相同的名称][1]如果这看起来很简单,我几个月前才开始使用java。我认为我不允许使用ArrayList,这是迄今为止我找到的唯一解决方案。非常感谢。
只需随机化列表的顺序,然后逐个打印出字符串。
这个问题可以随机解决。
您可以随机打乱这个数组{名称},然后选择名称[索引](索引从0开始,以names.length-1结束)。
如何洗牌此数组:
Random r = new Random();
for (int i = 0; i < names.length; i++){
int nextSwapIndex = r.nextInt(names.length);
String temp = names[nextSwapIndex];
names[nextSwapIndex] = names[i];
names[i] = temp;
}
如果您不能使用带有shuffle的列表来存储随机名称,那么您可能可以使用索引列表并将其替换为shuffle:
String [] names = {"Snoopy", "Donald Duck", "Mickey Mouse", "Little Timmy", "Spiderman"};
List<Integer> indices = IntStream.of(0,1,2,3,4).boxed().collect(Collectors.toList());
Collections.shuffle(indices);
// now iterate the indices and consume random names, one time only
for (int index : indices) {
System.out.println("Random name: " + names[index]);
}
问题内容: 如何将字符串中的字符随机播放(例如,hello可能是ehlol或lleoh或…)。我不想使用该方法,有没有更简单的方法? 问题答案: 我不知道更简单。但是您可以使用Math.rand()功能生成字符长度范围内的随机数,而无需替换,这将给您带来混乱的输出
问题内容: 我最近问了这个问题,答案使我加深了理解,但他们并没有解决我遇到的实际问题。因此,我将尝试如下提出类似但不同的问题。 假设我要访问的随机元素。一种方法是: 如果我想多次调用该函数怎么办?我猜我在寻找什么,就像是一个运算符/函数(返回),该函数将元素放在第-th个位置。为什么可以使用但不能通过例如这样的功能来访问此元素? 问题答案: Go中的值存储文本的UTF-8编码字节序列。这是已经做出
问题内容: 我一直在寻找一种不用使用collections.sort就可以对数组列表进行排序的方法,因为我自己的逻辑有缺陷,而且我遇到了很多麻烦。 我需要对它进行排序,以便可以使用我创建的一种方法,该方法基本上可以执行collections.swap的工作,以便对数组列表进行完全排序。 这是我的代码: 我对此一直很烦恼。抱歉,这是在伤害社区。 问题答案: 我想,你希望下面的算法:在阵列的其余部分发
问题内容: 仅当字符串中的字符没有转义时(即以另一个字符的奇数开头),如何才能找到它并对其进行操作? 例: 所需字符: 转义字符: 应该找到(并对其进行操作(例如拆分)) 应该 不会 应该 应该 不会 问题答案: 在后面使用负数a定义边界: 在这里观看现场演示 照顾Java中的反斜杠,正则表达式上方将是:
我用了这段代码并运行,但没有输出出来不知道为什么? 但如果正在使用s=“”;则也没有输出。 但是当我使用s=“”;那么输出就来了,为什么会这样呢?
我希望你一切都好!我使用依赖于时间的随机数进行加密。但这使得我的加密可以被破解……我的问题是,我如何在运行随机码后制作每次都不一样的随机码,并且不使用种子时间。大多数时候我们是这样随机的:srand((无符号)时间(0));cout