1

これが私のコードです:

public class Project1mrybak3
{   
    public static void main (String[] args)   
    {
        System.out.println("Begin Java Exection");  
        System.out.println("");

        // put your Java Program here

        //choose picture

        String  picfile = FileChooser.pickAFile();  
        Picture pic     = new Picture(picfile);

        //Create turtle 1   
        Turtle t1 = new Turtle (pic);   
        t1.setPenWidth(10);

        //Create turtle 2  
        Turtle t2 = new Turtle (pic);

        flower(t1,200);

        //show picture    
        pic.show();

        System.out.println("");     
        System.out.println("End Java Exection");
    }//end of main class


    public static void flower (Turtle tparam, int x )     
    {     
        tparam.forward(x);     
    }

    public static void flowers ()       
    {      
        flower(t1,15);    
    }
} // end of Template class

お分かりのように、あまり意味がありませんが、書き始めたばかりです。私の質問は、最後のメソッドについてflowers、実行しようとすると、シンボル変数が見つからないと表示されることですt1。パラメータを取り出すと、パラメータが必要であると表示されTurtleますint。メソッドの中にメソッドを入れることはできませんか?

最終的に私の目標は、花の部分を描画する約 4 つのメソッドを作成し、それらをすべて 1 つのメソッド内に配置してから、メイン コード内でそのメソッドをturtle t1いくつかのx変数で呼び出すことです。

助けてくれてありがとう!

4

3 に答える 3

3

いいえ、メソッドの中にメソッドを入れることはできません。

複数のメソッドを使用する必要があり、変数をパラメーターとして渡すことが意味がない場合は、必要な変数をクラスのフィールド (またはメンバー) にする必要があります (そのリンクを読んでください)。それらの宣言を、ローカルであるメソッド ( などmain) の外に移動し、クラス自体のスコープ内に移動します。次に、そのクラスのすべてのメソッドがそれらの変数を参照できます。

  • プレフィックスthis.付き
  • または、同じ名前のローカル変数がない限り、そのままです。
于 2013-10-01T00:11:07.377 に答える
1

NickC が言ったように、メソッドの中にメソッドを入れることはできません。ただし、ここで注意すべき重要なことは、例の t1 はメソッドではないということです。それはオブジェクトです(MethodリフレクションAPIのオブジェクトは、この質問の範囲を少し超えています...)。あなたのデザインを推測するつもりはありませんが、別の Turtle クラス内にさまざまな花を描くメソッドが必要なようです。そのクラス内に、すべてのヘルパー メソッドを順番に呼び出す別のメソッドを含めることができます。

public void drawFlower(int xPosition) {
    drawStem(xPosition);
    drawStamen(xPosition);
    drawPetals(xPosition);
    ...
}

そうすれば、これらのヘルパーメソッドはすべて、 (NickCが指摘したようTurtleに、キーワードを介して)描画を行っている(私が思うに)アクセスできthis、必要に応じて変更されたxPositionを返すことができるため、別の開始点を渡すことができます次のメソッドに。

于 2013-10-01T00:22:31.847 に答える