【问题标题】:how to generate a String random如何生成随机字符串
【发布时间】:2018-04-28 23:37:50
【问题描述】:

我使用了一个EditText 小部件,客户端可以在其中输入信息,然后我将几个条目保存在ArrayList 中。现在我想从ArrayList 中随机选择其中一项。如何从ArrayList 中随机选择一个元素?

我已经尝试过这些方法,但是当我运行它时它会崩溃。

String myrandomString = String.valueOf(rand.nextInt(options.size()));

//int myrandomString = rand.nextInt(options.toString().length());

【问题讨论】:

  • 从您的问题中不清楚您的问题是什么。如果您想要高质量/相关的答案,请考虑修改。

标签: java android random


【解决方案1】:

如果我理解正确,您已经有一个 ArrayList<String>,其中包含以前输入的字符串,并且当用户输入新字符串时,它会附加到此列表中。 您想要做的是从此列表中选择一个随机字符串。 您可以使用java.util.Random 类从列表中生成随机索引并返回位于该索引上的单词。 例如,下面的代码将在每次执行时打印测试列表的随机成员。

Random random = new Random();

List<String> test = Arrays.asList("Text1","Text2","Text3","Text4");
System.out.println(test.get(Math.abs(random.nextInt()) % test.size()));

编辑

如 cmets 中所述,将 Math.abs(random.nextInt()) % test.size() 替换为 random.nextInt(test.size()) 将使代码更具可读性并减少生成大量重复项的机会(这将使数字分布更加均匀)。

【讨论】:

  • 方法调用random.nextInt(test.size()) 也可以完成此操作,而不需要最终的% test.size()
  • 它不仅实现了相同的效果,而且效果更好。模运算大大降低了返回数字的随机性。
  • @BjörnZurmaar 你能否指出一些资源来解释为什么在这种情况下模运算符会降低随机性?
  • 不仅在这种情况下,使用这种随机数生成器时的一般效果。请参阅有效的 Java 项目 47 和例如这个问题:stackoverflow.com/questions/27779177/…
  • 感谢您提供的信息,我将更新答案。
【解决方案2】:

首先在 arrayList 大小中选择一个随机索引:

int randIdx = new Random().nextInt(arrayList.size());

然后获取该索引处的字符串

String randString = arrayList.get(randIdx);

【讨论】:

  • 请添加一些解释性文字,这样可以得到更好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 2017-08-01
  • 2011-06-30
  • 2018-01-06
  • 1970-01-01
相关资源
最近更新 更多