java - 仅使用不带 ArrayList 的 Random 写入不重复的随机数
问题描述
我在为随机数编写更清晰的程序而不重复时遇到了问题。我的代码有效,但不是很好。
我尝试了很多想法,尤其是我只是玩循环
for(int i=1; i<=pole.length;i++){
while(p<=13){
i=rd.nextInt(13)+1;
if(pole[i]==i){
}
else{
System.out.println`(i+"-"+p);
pole[i]=i;
p++;
if(i>Max){
Max=i;
}
}
i=Max;
}
我希望有 13 个数字而不重复这个数字,但是如何更容易地编写它
解决方案
如果出于某种原因您不想使用 Collections.shuffle(),您也可以使用 Set 实现相同的目的。
Set<Integer> set = new LinkedHashSet<>();
while (set.size() < 13)
set.add((int) (Math.random() * 101));
请记住,您还必须检查随机数范围是否远大于设置的大小(在上面的示例中,您需要确保 101 始终大于所需的唯一数字的数量,即 13,否则您最终会进入一个非常长/无限的while循环)
推荐阅读
- c - sprintf 反转一个 int 并存储为 char
- php - 如何在 PHP 中重命名上传的文件
- javascript - 检查字符串是否包含 JavaScript 代码或普通字符串?
- c# - Vistual Studio 2017 C# 诊断工具 关闭括号的函数占用大量时间意味着什么?
- unity3d - unity游戏无法玩
- query-string - AWS Cognito 托管的 UI 在 URL 中返回 id_token
- python - Pandas:检查列中是否存在值,创建一个新列,如果不存在则添加 0
- spring-boot - 在构造函数中使用 @Value 时,Junit 5 中的 @MOCK 返回 NULL
- python - Python 和 PiCamera 颜色检测布尔问题
- python - 如何使用opencv python对图像执行图像卷积