与Java中生成唯一随机数非常相似。但是用字母和数字,而不仅仅是数字。
那么我该如何处理"生成字母/数字的随机数组,但不能两次使用同一个字母/数字"呢。例如:
好:"abcdefghijklmnopqrstuvxyz1234567890"QWERTYUIOPASDFGHJKLZXCVBNM0246813579"错误:"aacddfghhjklmmopprstuvwxy2335925523"
它需要包含字母表中的每个字母,但只能包含一次,并且按随机顺序。
有一个字符池的数组,对它们进行洗牌,然后在每次需要随机字符时弹出一个。
- 声明一个
List<Char>
,并将每个字母添加到其中,并对数字的List<int>
执行同样的操作 - 使用
Math.random()
可以得到一个长度不超过List
的随机数 - 使用该编号从
List
中获取相应项目,然后将其从List
中删除 - 重复直到
List.isEmpty() == true
- 对编号
List
执行相同操作
编辑:亚历克斯的答案可能更简单。
另一个解决方案是创建一个包含所有所需字符的文本数组。
例如Char[]myArray={"a","b"..};
然后从数组中提取随机索引并插入到映射中,直到映射的大小等于数组的大小。地图将永远不会包含重复的,并且您将有许多随机组合。在这种情况下,映射的键和值可以是相同的。