级联 if 语句时出错



我有这个如果那么我正在处理的语句,其中一部分似乎不起作用。在我类的最后一部分,编译器说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;
        }
    }
}

最新更新