Привет, когда я запускаю этот кусок кода и возвращаю ложное расстояние, новое случайное число не генерируется. Одно и то же случайное число непрерывно генерируется, тем самым превращая меня в бесконечный цикл. Кто-нибудь знает, почему это происходит? Спасибо, что посмотрели!Новое случайное число, не генерирующее
private void setRandomVerticies()
{
//generate 200 triangles
this.randomVerticies = new LinkedList<TGVertex>();
random.setSeed(System.currentTimeMillis());
short x = 5000, y = 5000;
int specT = 0;
int vert = 0;
int triangleCount = 0;
int rx = 0, ry = 0;
int sameAxis = 0;
TGVertex check = new TGVertex(x,y);
for (int i = 1; i <= 600; i++)
{
for (;;)
{
rx = random.nextInt();
ry = random.nextInt();
System.out.println("generate a new random number please");
if(i == 1) break;
if (specT == 1) //approximately 50 triangles will have 2 vertices against the edge
{
if (sameAxis == 0 || sameAxis == 1) { rx = 0;
}else if (sameAxis == 2 || sameAxis == 3) { ry = 0;
}else if (sameAxis == 4 || sameAxis == 5) { rx = tImage.getWidth()-1;
}else if (sameAxis == 6 || sameAxis == 7) { ry = tImage.getHeight()-1; }
check = new TGVertex(rx, ry);
if (!randomVerticies.contains(check))
{
if (vert == 2 && distance(check, randomVerticies.get(i-2)))
{
sameAxis++;
if (sameAxis == 8) sameAxis = 0;
break; //breaks while loop if new vertex is chosen
}
else if (vert == 1)
{
sameAxis++;
if (sameAxis == 8) sameAxis = 0;
break; //breaks while loop if new vertex is chosen
}
}
}
rx = (short)(rx & 0x1FF);
ry = (short)(rx & 0x19D);
check = new TGVertex(rx, ry);
System.out.println("rx = " + rx + " ry = " + ry);
System.out.println("check = " + check.getX() + ", " + check.getY());
System.out.println("randomVert = " + randomVerticies.get(i-2).getX() + ", " + randomVerticies.get(i-2).getY());
if (!randomVerticies.contains(check) && distance(check, randomVerticies.get(i-2))) break; //breaks while loop if new vertex is chosen
}
String sliceX = Integer.toHexString(this.width()-1);
String sliceY = Integer.toHexString(this.height()-1);
int sX = (int) Integer.parseInt(sliceX, util.Global.HEX);
int sY = (int) Integer.parseInt(sliceY, util.Global.HEX);
x = (short) (rx & sX);
y = (short) (ry & sY);
//System.out.println("("+x+", "+y+")");
randomVerticies.add(new TGVertex(x, y));
if (i % 3 == 0) triangleCount++;
if (triangleCount == 2 && vert < 3)
{
specT = 1;
vert++;
}
if (vert == 3)
{
specT = 0;
vert = 0;
triangleCount = 0;
}
}
}
Вот результат, так как вы можете видеть, что randomVert никогда не меняет значения.
rx = 196 ry = 132
check = 196, 132
randomVert = 225, 392
generate a new random number please
rx = 383 ry = 285
check = 383, 285
randomVert = 225, 392
generate a new random number please
rx = 328 ry = 264
check = 328, 264
randomVert = 225, 392
generate a new random number please
rx = 102 ry = 4
check = 102, 4
randomVert = 225, 392
generate a new random number please
rx = 197 ry = 133
check = 197, 133
randomVert = 225, 392
generate a new random number please
rx = 62 ry = 28
check = 62, 28
randomVert = 225, 392
generate a new random number please
rx = 295 ry = 261
check = 295, 261
randomVert = 225, 392
generate a new random number please
rx = 142 ry = 140
check = 142, 140
randomVert = 225, 392
generate a new random number please
rx = 261 ry = 261
check = 261, 261
randomVert = 225, 392
Это один из самых сложных фрагментов кода, который я когда-либо видел. Вау! – Adam
Скомпилирует? в строке 5 вы вызываете random.setSeed(), но не объявляется до 13 ... Я бы не использовал миллисекундный посев, поскольку Random уже засеял nano seconds и уникальную соль экземпляра. – Adam
Это компилируется, извините за путаницу с дополнительным случайным вызовом. Он был удален и обновлен в редакции. – vector