当前位置: 首页 > 知识库问答 >
问题:

如何在不使用arraylist的情况下仅拾取一次随机字符串

孙才捷
2023-03-14

有没有办法从数组中选择一个随机字符串,而不再选择该字符串。所有字符串只拾取一次后,程序结束。

这是我当前的系统,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,这是迄今为止我找到的唯一解决方案。非常感谢。

共有3个答案

司空玮
2023-03-14

只需随机化列表的顺序,然后逐个打印出字符串。

姜嘉良
2023-03-14

这个问题可以随机解决。

您可以随机打乱这个数组{名称},然后选择名称[索引](索引从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;
}
胡彭亮
2023-03-14

如果您不能使用带有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