Java double for-l oop и условие usng stdDraw, чтобы нарисовать картинку, не может найти ошибку - PullRequest
0 голосов
/ 06 апреля 2020

Я учусь java дома, так как университет закрыт. В последнее время я пытаюсь нарисовать картинку, используя StdDraw, как вы видите на картинке ниже, но я не понимаю, почему отсутствует красный круг в середине, надеюсь, вы могли бы помочь мне, спасибо!

отсутствует один красный кружок посередине

import java .awt. *;

publi c class draw1 {

public static void main(String[] args) {
    int n = 8;
    int width = 300;
    int height = 300;
    int circle_x = width / n / 2;
    int circle_y = height / n / 2;
    int radius = 300 / n / 2;

    StdDraw.setCanvasSize(width, height);
    StdDraw.setXscale(0, 300);
    StdDraw.setYscale(0, 300);
    StdDraw.setPenRadius(0.002);
    StdDraw.setPenColor(Color.blue);

    for (int i = 1; i <= n; i++) {


        for (int j = 1; j <= n; j++) {
            if (i == 1 || i == n) {
                if (j == 1 || j == n) {
                    StdDraw.setPenColor(Color.blue);
                    StdDraw.setPenRadius(0.002);
                    StdDraw.circle(circle_x, circle_y, radius);
                } else if (j >= 2 && j < n) {
                    StdDraw.setPenColor(Color.red);
                    StdDraw.setPenRadius(0.006);
                    StdDraw.circle(circle_x, circle_y, radius);
                }


            } else  {
                if (j == 1 || j == n) {
                    StdDraw.setPenColor(Color.blue);
                    StdDraw.setPenRadius(0.002);
                    StdDraw.circle(circle_x, circle_y, radius);
                } else if (j >= 2 ) {
                    if (n % 2 == 0) {
                        if (j == n / 2) {
                            StdDraw.setPenColor(Color.orange);
                            StdDraw.setPenRadius(0.006);
                            StdDraw.circle(circle_x + radius, circle_y, radius);



                        } else if ( (i == n / 2 )  ){
                            StdDraw.setPenColor(Color.red);
                            StdDraw.setPenRadius(0.006);
                            StdDraw.circle(circle_x, circle_y + radius, radius);

                            System.out.println(i + "=i");

                        }
                    } else if (n % 2 != 0) {
                        if (j == n / 2 + 1) {
                            StdDraw.setPenColor(Color.orange);
                            StdDraw.setPenRadius(0.006);
                            StdDraw.circle(circle_x, circle_y, radius);
                        } else if (i == n / 2 + 1) {
                            StdDraw.setPenColor(Color.orange);
                            StdDraw.setPenRadius(0.006);
                            StdDraw.circle(circle_x, circle_y, radius);
                        }
                    }


                }
            }
            System.out.println(j);
                    circle_x = circle_x + (radius * 2);
                }
                circle_x = width / n / 2;
                circle_y = circle_y + width / n;


            }


        }

    }

1 Ответ

0 голосов
/ 06 апреля 2020

Я думаю, что это может быть вашей проблемой.

                if (n % 2 == 0) {
                    if (j == n / 2) {
                        StdDraw.setPenColor(Color.orange);
                        StdDraw.setPenRadius(0.006);
                        StdDraw.circle(circle_x + radius, circle_y, radius);



                    } else if ( (i == n / 2 )  ){    <---- HERE MIGHT BE YOUR PROBLEM
                        StdDraw.setPenColor(Color.red);
                        StdDraw.setPenRadius(0.006);
                        StdDraw.circle(circle_x, circle_y + radius, radius);

                        System.out.println(i + "=i");

                    }

В одном случае i и j имеют одно и то же значение. В вашем случае это 4. Если i и j оба равны 4, код всегда будет go в первом if (j == n/2) и не будет выполнять else if... Так что в основном красный кружок, который вы просили, не будет нарисован.

Кстати: проверка n%2==0 практически бесполезна, поскольку вы не меняете значение n (оно всегда равно 8). Таким образом, ваш последний код никогда не будет выполнен:

                } else if (n % 2 != 0) {
                    if (j == n / 2 + 1) {
                        StdDraw.setPenColor(Color.orange);
                        StdDraw.setPenRadius(0.006);
                        StdDraw.circle(circle_x, circle_y, radius);
                    } else if (i == n / 2 + 1) {
                        StdDraw.setPenColor(Color.orange);
                        StdDraw.setPenRadius(0.006);
                        StdDraw.circle(circle_x, circle_y, radius);
                    }
                }

Хотя нет никакой гарантии, но на основании вашего кода это может быть причиной.

...