根据条件更改坐标

问题描述 投票:0回答:1

我有 500x500 网格和该网格上的随机坐标。我正在尝试获取新的随机坐标,但它们不应该与以前的坐标太接近。我想出了这个:在无限循环中,我为变量分配一个新的随机值,如果该值满足条件(它在一定数量上更大或更小(可能会改变)),那么我将打破循环.

int oldX = (int) (Math.random() * 500);
int oldY = (int) (Math.random() * 500);
int newX;
int newY;
int minDistance = 10;

while (true) {
    newX = (int) (Math.random() * 500);
    if (newX <= (oldX - minDistance) | newX >= (oldX + minDistance)) {
        break;
    }
}

while (true) {
    newY = (int) (Math.random() * 500);
    if (newY <= (oldY - minDistance) | newY >= (oldY + minDistance)) {
        break;
    }
}

但我感觉有些不对劲。也许有更好的解决方案?

java random infinite-loop
1个回答
0
投票

只是为了将重复的

while
循环代码块删除到方法调用中,并假设
500 x 500
网格从索引 0 开始,到索引 499 结束,这将使当前的随机公式正确 为那些值是可以达到的。如果要包含 500,则当前的随机公式是不正确,因为该值无法达到。您必须将
500
更改为
501
才能使
500
包含在内。

这还假设

newX
newY
最终将分别变成
oldX
oldY

int x = 0, y = 0;
int minDistance = 10;
x = getRandom(x, minDistance);
y = getRandom(y, minDistance);
    
System.out.println(String.format("%-3d - %-3d", x, y));   // Optional

getRandom()
方法:

public static int getRandom(int currentXorY, int minDistance) {
    int rnd = currentXorY;
    while (rnd >= (currentXorY - minDistance) && rnd <= (currentXorY + minDistance)) {
        rnd = (int) (Math.random() * 500);
    }
    return rnd;
}
© www.soinside.com 2019 - 2024. All rights reserved.