0

我很难找到我的程序有什么问题。当我执行它时,它似乎陷入了无限循环(或类似的东西),我无法弄清楚我的程序出了什么问题。这是我到目前为止所拥有的:

public class Spiral extends JComponent{

int WIDTH = 0;
int HEIGHT = 0;


public Spiral(int WIDTH, int HEIGHT) {
    this.WIDTH = WIDTH;
    this.HEIGHT = HEIGHT;
}


 public void paintSpiral(Graphics g){
    double a = 3;
    double b = 0;
    double t = 0;
    double theta = Math.toRadians(t);
    double r = theta * a + b;
    double pi = Math.PI/180;
    double end = 720 * pi;

    int middle_x = WIDTH / 2;
    int middle_y = HEIGHT / 2;

    for (theta = 0; theta < end; theta += pi) {
        double x = Math.cos(theta) * r + middle_x;
        double y = Math.sin(theta) * r + middle_y;
        int xx = (int) Math.round(x);
        int yy = (int) Math.round(y);
        g.drawLine(xx, yy, xx + 10, yy + 20);
    }


}

public void paintComponent(Graphics g) {
    paintSpiral(g);
}

public static void main(String[] args) {
    int WINDOW_WIDTH = 1024;
    int WINDOW_HEIGHT = 1024;

    JFrame frame = new JFrame();

    frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);

    // Set the title of the window
    frame.setTitle("Archimedean Spiral");

    // Make a new Spiral, add it to the window, and make it visible
    Spiral d = new Spiral(1024, 1024);
    frame.add(d);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

我必须使用图形,这就是为什么我让 Math.round 将 x 值更改为整数,以便我可以实际绘制线条。这就是我怀疑的问题,但我似乎无法解决它。有什么建议么?

4

1 回答 1

3

循环变量t的类型为int,因此t += pi实际上是无操作的,从而导致无限循环。

t应该是类型double。此外,它应该是本地的,paintSpiral而不是类的成员。我不明白您为什么使用t(为零)来初始化r.

此外,您的度数和弧度似乎都很混乱。

于 2013-04-04T14:11:42.977 回答