1

Javaの助けを借りて円を描こうとしていますが、行き詰っていますこれまでのところ、

public class Circle {
public static void DrawMeACircle(int posX, int posY, int radius) {
    int a = 10;
    int b = 10;

    int x = posX - a; //x = position of x away from the center
    int y = posY - b;
    int xSquared = (x - a)*(x - a);
    int ySquared = (y - b)*(y - b);
    for (int i = 0;i <=20; i++) {
        for (int j = 1;j <=20; j++) {
            if (Math.abs(xSquared) + (ySquared) >= radius*radius && Math.abs(xSquared) + (ySquared) <= radius*radius) {
                    System.out.println("#");
            } else {
                System.out.println(" ");
            }
        }

    }
}

public static void main(String[] args){
    DrawMeACircle(5,5,5);



    }

}

ご覧のとおり、これは適切に機能しません。これを解決する方法を知っている人はいますか?可能な限りの助けに感謝します、マイケル。

4

1 に答える 1

1

まず第一に、あなたの内的状態はとにif依存しないので、定数です。つまり、毎回同じ記号 (スペース記号) が出力されます。ij

次に、System.out.println(" ");各シンボルに改行を追加して、毎回使用しています。したがって、結果はスペースの列のように見えます。

最後になりましたが、描画領域は 20x20 の「ピクセル」に制限されており、大きな円に収まりません。

これらすべてのポイントを次のようなもので一緒に修正できます

public class Circle {
public static void DrawMeACircle(int posX, int posY, int radius) {
    for (int i = 0;i <= posX + radius; i++) {
       for (int j = 1;j <=posY + radius; j++) {
            int xSquared = (i - posX)*(i - posX);
            int ySquared = (j - posY)*(j - posY);
            if (Math.abs(xSquared + ySquared - radius * radius) < radius) {
                System.out.print("#");
            } else {
                System.out.print(" ");
            }
        }
        System.out.println();
    }
}

public static void main(String[] args){
    DrawMeACircle(5,15,5);
}
}

これは、円にいくらか似ています。

于 2013-10-20T22:52:08.537 に答える