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ループでは、ループ変数は変更さx1y1ません。つまり、変数は常に変更され01条件を永久に満たすため、プログラムは永久に実行されます。

一時変数を使用するループでは、ある段階で条件が満たされるように、ループ変数の値を変更する必要があります。

ここでは、ループ内の変数x1y1変数をインクリメントします。ループ内のretuenステートメントによりx1、最初の実行後にループが終了します。ループを削除する必要があります。

また、ピクセル(x、y)を常に取得していましたが、xとyの値はループ全体で一定のままです。ここで必要なのは、ピクセル(x1、y1)だと思います。

于 2013-03-05T02:57:52.773 に答える
0

もちろん、それは永遠に実行されます

while(x1 < x*2)

メソッドの呼び出しのように、xの値が0より大きい場合

pRef.purpleSplotch(14,14);

y1のwhileループでも同じことが起こります。

PurpleSplotchメソッドでx1とy1をインクリメントする必要がある場合があります。何をしなければならないのかわかりませんが、条件は常に真であるため、無限ループになります。

于 2013-03-05T02:59:19.263 に答える
0

問題は、whileループでインデックスとして使用される変数をインクリメントしていないため、ループが無期限に実行されることです。両方の変数 (x1y1) をインクリメントして、ある時点で両方の while ループを終了するようにします。今のところ、x1を超えることはxありy1ません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 に答える