我想生成一个范围内的随机数,并且生成的数字不应在某个范围内发生冲突。
我使用了以下代码,但我收到 Stackoverflow 错误..有更好的解决方案吗?
static int [] xPositions=new int[10];
int WIDTH=700
public static void main(String args[])throws IOException
{
if(generateRandomXPositions(10)){
for(int i=0;i<10;i++){
System.out.println(" Random Numbers "+i+" :"+xPositions[i]);
}
}
}
private static boolean generateRandomXPositions(int n) {
for(int i=0;i<10;i++){
int temp=((int)0 + (int)(Math.random() * ((WIDTH - 0) + 1)));
for(int j=0;j<xPositions.length;j++){
if(xPositions[j]>temp-50 && xPositions[j]<temp+50){ // IF GENERATED NUMBER IS IN THIS RANGE IT SHOULD REGENERATE THE NUMBERS
generateRandomXPositions(10);
}
}
xPositions[i]=temp;
}
return true;
}
我知道问题就在这里
if(xPositions[j]>temp-50 && xPositions[j]<temp+50).
下面的效果很好
`if(xPositions[j]==temp)`.
但是我需要随机数应该遵循这个范围! .
许多人想知道递归循环的退出条件。但我相信如果随机数不在这个范围内,那么就没有必要进入递归循环。
更新1:
而且我相信编译器已经厌倦了寻找这个范围之间的数字!现在我发现不可能将 10 个宽度为 100px 的图像放入 700px 宽度的容器中而不碰撞 X 位置!
请看下图。让我们想象一下我想随机放置这个盒子而不发生碰撞......我该怎么做?
最佳答案
由于我认为这是作业,并且您的问题相当模糊,因此请尝试自己填写这些方法并将它们智能地结合起来。
public int generateRandom();
public boolean isAccepted(int number);
public void generate();
对于generate()
,使用一些循环,例如:
int temp = generateRandom();
while (!isAccepted(temp)) temp = generateRandom();
关于java错误堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633271/