0

Dr.Java 不会运行我的程序,因为我的变量会永远存在,我不知道如何防止这种情况发生。如果你能告诉我如何解决这个问题,那就太好了。我是初学者,所以这对我来说都是陌生的。

这是该课程的代码:

import java.awt.Color;
class PaintablePicture extends Picture {
    public PaintablePicture(String fileName) {
        super(fileName);
    }

    public void purpleSplotch(int x, int y) {
        int x1 = 0;
        int y1 = 1;
        while (x1 < x * 2)
            while (y1 < y * 3)

            {
                Color purple = new Color(175, 0, 175);
                Pixel pixRef;
                pixRef = this.getPixel(x, y);
                pixRef.setColor(purple);

            }
        return;

    }
}

然后这就是我运行它的方法(忽略其他类的所有艺术乌龟的东西,一切都很好,直到我开始绘制可绘制的图片。

public class GraffitiApp
{
  public static void main(String[] a)
{

FileChooser.pickMediaPath();
PaintablePicture pRef;
pRef = new PaintablePicture(FileChooser.pickAFile());
pRef.purpleSplotch(14,14); 
pRef.purpleSplotch(17,20);

ArtisticTurtle tRef = new ArtisticTurtle(pRef);
tRef.pentagon(20);
tRef.spiral(50);
tRef.penUp();
tRef.forward(-50);
tRef.turn(90);
tRef.penDown();
tRef.letterK(50);
tRef.penUp();
tRef.turn(-130);
tRef.forward(100);
tRef.turn(90);
tRef.forward(140);
tRef.penDown();
tRef.letterK(30);
tRef.penUp();
tRef.moveTo(486, 60);
tRef.penDown();
tRef.star(30);
tRef.penUp();
tRef.moveTo(159,122);
tRef.turn(30);
tRef.penDown();
tRef.star(60);
tRef.penUp();
tRef.moveTo(330,103);
tRef.turn(-67);
tRef.penDown();
tRef.pentagon(40);
tRef.penUp();
tRef.moveTo(471,158);
tRef.penDown();
tRef.spiral(35);

pRef.explore();

} }

4

3 回答 3

1

我认为应该是

class PaintablePicture extends Picture {
    public PaintablePicture(String fileName) {
        super(fileName);
    }

    public void purpleSplotch(int x, int y) {
        int x1 = 0;
        int y1 = 1;
        while (x1 < x * 2)
            while (y1 < y * 3)

            {
                Color purple = new Color(175, 0, 175);
                Pixel pixRef;
                // get pixels (x1, y1) instead of (x, y) there is use to set the color of the same pixel(x,y) in a loop
                pixRef = this.getPixel(x1, y1);
                pixRef.setColor(purple);
                // increment y1
                y1++;

            }
        // increment x1
        x1++;
    }
}

在你的 while 循环中,循环变量x1永远y1不会改变,这意味着它们总是0并且1永远满足条件,这就是你的程序永远运行的原因。

在任何带有临时变量的循环中,您都需要更改循环变量的值,以便在某个阶段满足条件。

在这里,我们将在它们的循环中增加x1andy1变量,循环中的 retuen 语句x1将导致循环在第一次执行后退出,它必须被删除。

此外,您总是得到像素 (x,y),x 和 y 的值在整个循环中保持不变,我想您需要的是像素 (x1, y1)

于 2013-03-05T02:57:52.773 回答
0

您的问题是您没有增加while循环中用作索引的变量,因此循环无限期地运行。增加两个变量 (x1y1) 以确保您将在某个时候退出两个 while 循环。现在,x1永远不会超过xy1永远不会超过y

while(x1 < x*2) {
    while(y1 < y*3) {
         Color purple = new Color(175, 0, 175);
         Pixel pixRef;
         pixRef= this.getPixel(x,y);
         pixRef.setColor(purple);
         //increment y1 here
         y1++;
    }
    //increment x1 here
    x1++;
}
于 2013-03-05T02:56:00.883 回答
0

当然它会永远运行

while(x1 < x*2)

在调用方法时 x 的值大于 0

pRef.purpleSplotch(14,14);

y1 的 while 循环也是如此。

您可能需要在 PurpleSplotch 方法中增加 x1 和 y1。我不知道它必须做什么,但条件将永远为真,因此无限循环。

于 2013-03-05T02:59:19.263 回答