我有这个如果那么我正在处理的语句,其中一部分似乎不起作用。在我类的最后一部分,编译器说math.random>.6666的部分给了我一个错误,并说这不是一个我不确定是什么原因造成的陈述。
private static void createShapes() {
for (int i = 0; i < shapes.length; i++) {
// Select a random color
int red = generateRandomInt(0, 255);
int green = generateRandomInt(0, 255);
int blue = generateRandomInt(0, 255);
Color color = new Color(red, green, blue);
// Decide whether to create a circle or a rectangle
if (Math.random() > 0&&Math.random()<=.3333333) {
// Generate a circle with a random size and position
int diameter = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - diameter);
int y = generateRandomInt(0, WINDOW_SIZE - diameter);
shapes[i] = new Circle(x, y, color, diameter);
} else if (Math.random()>.3333333) {
// Generate a rectangle with a random size and
// position
int width = generateRandomInt(MIN_SIZE, MAX_SIZE);
int height = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - width);
int y = generateRandomInt(0, WINDOW_SIZE - height);
shapes[i] = new Rectangle(x, y, color, width, height);
} else (Math.random()>.66666666666){
int leng = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - leng);
int y = generateRandomInt(0, WINDOW_SIZE - leng);
shapes[i] = new Triangle(x, y, color, leng);
}
}
}
你有else (Math.random()>.66666666666){
这不会编译。 要么你需要一个IF,要么你需要删除对Math.Random()的检查。
你正在为每个if语句创建一个新的随机数。 您应该创建一个变量。 在当前的代码中,即使在else if
修复之后,所有这些条件都可能得到满足,甚至根本不满足。
double random = Math.random();
if (random > 0 && random <=.3333333) {
// Generate a circle with a random size and position
int diameter = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - diameter);
int y = generateRandomInt(0, WINDOW_SIZE - diameter);
shapes[i] = new Circle(x, y, color, diameter);
} else if (random >.3333333 && random < 0.666666) {
// Generate a rectangle with a random size and
// position
int width = generateRandomInt(MIN_SIZE, MAX_SIZE);
int height = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - width);
int y = generateRandomInt(0, WINDOW_SIZE - height);
shapes[i] = new Rectangle(x, y, color, width, height);
} else {
int leng = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - leng);
int y = generateRandomInt(0, WINDOW_SIZE - leng);
shapes[i] = new Triangle(x, y, color, leng);
}
你甚至不需要else
中的最后一个条件,因为如果不满足其他两个条件,将自动满足最后一个条件。您所需要的只是else
.
一个更好的设计会我会
if (random > 0.66666) {
...
}
else if (random > 0.33333){
...
}
else {
...
}
如果满足第一个条件,则其他两个条件将不执行。如果不满足第一个条件,而满足第二个条件,则第三个条件将不会执行。如果不满足前两个,则执行第三个。
你在最后一个 else 之后缺少一个 if 语句:
else if (Math.random()>.66666666666){
您可以使用已经编写的代码来使其更加清晰。 我假设您的generateRandomInt
方法在其两个参数之间生成一个数字(包括两个参数)(也就是说,两个参数都是可能的返回值)。
private static void createShapes() {
for (int i = 0; i < shapes.length; i++) {
// Select a random color
int red = generateRandomInt(0, 255);
int green = generateRandomInt(0, 255);
int blue = generateRandomInt(0, 255);
Color color = new Color(red, green, blue);
int shapeType = generateRandomInt(0, 2);
switch (shapeType) {
case 0:
// Generate a circle with a random size and position
int diameter = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - diameter);
int y = generateRandomInt(0, WINDOW_SIZE - diameter);
shapes[i] = new Circle(x, y, color, diameter);
break;
case 1:
// Generate a rectangle with a random size and
// position
int width = generateRandomInt(MIN_SIZE, MAX_SIZE);
int height = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - width);
int y = generateRandomInt(0, WINDOW_SIZE - height);
shapes[i] = new Rectangle(x, y, color, width, height);
break;
case 2:
int leng = generateRandomInt(MIN_SIZE, MAX_SIZE);
int x = generateRandomInt(0, WINDOW_SIZE - leng);
int y = generateRandomInt(0, WINDOW_SIZE - leng);
shapes[i] = new Triangle(x, y, color, leng);
break;
}
}
}