所以我在给定网格上生成包含x个行和y个列的随机坐标。假设我想在8乘6网格上生成25个随机数。(8列,6行) 我写了这样的代码片段,它只是部分工作,因为这段代码不排除重复:
int intputRows =6;
int inputColumns=8;
Random randomNumGenerator = new Random();
for(int i=0;i<25;i++){
int randomRows = randomNumGenerator.nextInt(inputRows);
int randomColumns = randomNumGenerator.nextInt(inputColumns);
}
我的问题是,如何避免生成重复的数字?我知道有些方法可以将这些内容置于List
结构中并进行随机播放,但是我可以使用Random
生成器完成吗?
答案 0 :(得分:1)
只需使用Set
:
int intputRows =6;
int inputColumns=8;
HashSet<Integer> set = new HashSet<>();
Random randomNumGenerator = new Random();
int temp;
for(int i=0;i<25;i++){
temp = randomNumGenerator.nextInt(inputRows);
if(set.add(temp))
int randomRows = temp;
temp = randomNumGenerator.nextInt(inputRows);
if(set.add(temp))
int randomColumns = temp;
}
你仍然需要实现一个else
,以防它已经存在,但我刚刚给了你这个想法。
答案 1 :(得分:0)
简单地将数字添加到Set
,例如HashSet
,不能包含重复值,直到您设置所需的长度。
Set<Integer> randomNumbers = new HashSet<Integer>();
while(randomNumbers.size() < 25) {
randomNumbers.add( randomNumGenerator.nextInt(inputRows) );
}
当然,一些检查可以很好地测试代码是否有可能完成等等。