我写了一个小程序,它从用户输入x1,y1和x2,y2绘制一条线。由于某种原因,线仅在水平时起作用,但是一旦线应该是垂直的,它只显示黑色像素而不是线。我已经检查了所有内容,我很确定我的算法是正确的,但问题仍然存在。
int x1 = Integer.parseInt(this.jTextFieldX1.getText());
int y1 = Integer.parseInt(this.jTextFieldY1.getText());
int x2 = Integer.parseInt(this.jTextFieldX2.getText());
int y2 = Integer.parseInt(this.jTextFieldY2.getText());
int xi = x2 > x1 ? 1:-1;
int yi = y2 > y1 ? 1:-1;
int dx = Math.abs(x2-x1);
int dy = Math.abs(y2-y1);
int xn= x1;
int yn= y1;
int pn;
canvas.showBlackPixel(xn,yn);
if (dx > dy)
{
pn= 2*dy - dx;
while (xn != x2)
{
if (pn >0)
{
xn=xn + xi;
yn=yn + yi;
pn=pn + 2*dy - 2*dx;
}
else
{
xn = xn + xi;
pn = pn+ 2*dy;
}
canvas.showBlackPixel(xn,yn);
}
{
if (dy > dx)
{
pn= 2*dx - dy;
while (yn != y2)
{
if (pn > 0)
{
xn=xn + xi;
yn=yn + yi;
pn=pn + 2*dx - 2*dy;
}
else
{
yn = yn + yi;
pn = pn + 2*dx;
}
canvas.showBlackPixel(xn,yn);
}
}
}
}
}
我该如何解决?
答案 0 :(得分:1)
问题在于你的陈述被终止,也就是说你的大括号{}混淆了一点。具体而言,减少代码的相关位:
if (dx > dy)
{
...
if (dy > dx)
{
...
}
}
如果您修复了大括号,那么它看起来应该会更好。
if (dx > dy)
{
...
}
if (dy > dx)
{
...
}
但是当dx == dy时,你仍会遇到问题。