在java

时间:2015-08-02 17:39:58

标签: java

所以我在给定网格上生成包含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生成器完成吗?

2 个答案:

答案 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) );
}

当然,一些检查可以很好地测试代码是否有可能完成等等。