「if」ブラケット内の変数を割り当てます。ブラケット外でその変数をどのように使用しますか?

assign brackets if-statement java variables
「if」ブラケット内の変数を割り当てます。ブラケット外でその変数をどのように使用しますか?

私はフラクタルを作成するプログラムを作成していますが、ユーザーはフラクタルの色を選択することになっています。 唯一の問題は、色変数が「if」ステートメントの外側で機能しないことです。 ここに私のコードがあります:(「public void fractalEngine」の問題は、ペンの色が設定されている場所までです。 これらの「verifiedChoice」変数はifステートメント内で開始され、残りのコードには引き継がれないようです。

import java.awt.*;
import java.util.Scanner;

class anotherClass
{
    World worldObj = new World();
    Turtle m = new Turtle(100, 340, worldObj);
    Scanner in = new Scanner(System.in);

    public void hello()
    {
        System.out.println("This program is a fractal engine");
        System.out.println("A fractal shape is a geometric shape that represents");
        System.out.println("the whole shape, no matter what level of scale");
        System.out.println();
        System.out.println("Your fractal picture will have three different colors,");
        System.out.println("Please pick three of the following:");
        System.out.println("RED, GREEN, BLUE, ORANGE, BLACK, YELLOW, MAGENTA, PINK");
        System.out.println("NOTE: Type your choices just like they appear.");
        System.out.println();
    }


    public void fractalEngine(int pxLength, String fractalRule)
    {
        System.out.println("Choice #1 out of 3: ");
        String choice1 = in.nextLine();
        if(choice1.equals("RED") || choice1.equals("GREEN") || choice1.equals("BLUE") || choice1.equals("ORANGE") || choice1.equals("BLACK") || choice1.equals("YELLOW") || choice1.equals("MAGENTA") || choice1.equals("PINK"))
        {
            System.out.println("Your first choice has been set to " + choice1);
            String verifiedChoice1 = choice1;
        }
        else
        {
            System.out.println("That choice is not valid, your first choice will now be red");
            String verifiedChoice1 = "RED";
        }



        System.out.println("Choice #2 out of 3: ");
        String choice2 = in.nextLine();
        if(choice2.equals("RED") || choice2.equals("GREEN") || choice2.equals("BLUE") || choice2.equals("ORANGE") || choice2.equals("BLACK") || choice2.equals("YELLOW") || choice2.equals("MAGENTA") || choice2.equals("PINK"))
        {
        System.out.println("Your second choice has been set to " + choice2);
        String verifiedChoice2 = choice2;
        }
        else
        {
            System.out.println("That choice is not valid, your second choice will now be green");
            String verifiedChoice2 = "GREEN";
        }



        System.out.println("Choice #3 out of 3: ");
        String choice3 = in.nextLine();
        if(choice3.equals("RED") || choice3.equals("GREEN") || choice3.equals("BLUE") || choice3.equals("ORANGE") || choice3.equals("BLACK") || choice3.equals("YELLOW") || choice3.equals("MAGENTA") || choice3.equals("PINK"))
        {
            System.out.println("Your thrid choice has been set to " + choice3);
            String verifiedChoice3 = choice3;
        }
        else
        {
            System.out.println("That choice is not valid, your thrid choice will now be blue");
            String verifiedChoice3 = "BLUE";
        }

        m.setHeading(0);
        String subData = "";
        m.turn(30);
        for(int n = 0; n < fractalRule.length() ; n=n+1)
        {
            subData = fractalRule.substring(n, n+1);

            if(subData.equalsIgnoreCase("F"))
                m.forward(pxLength);
            else if(subData.equals("+"))
                m.turn(120);
            else if(subData.equals("-"))
                m.turn(300);
            else if(subData.equals("1"))
                m.setPenColor(verifiedChoice1);
            else if(subData.equals("2"))
                m.setPenColor(verifiedChoice2);
            else if(subData.equals("3"))
                m.setPenColor(verifiedChoice3);
            else if(subData.equalsIgnoreCase("Q"))
                m.hide();

        }
    }
}

public class complexFractal
{

    public static void main(String[] args)
    {
       int lineLength = 15;
       String rule = "1F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F2+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F3+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-FQ";

       anotherClass ac = new anotherClass();

       ac.hello();
       ac.fractalEngine(lineLength, rule);
    }
}

  0  0


ベストアンサー

`public void fractalEngine(int pxLength、String fractalRule)`内で、 `{`記号のすぐ後に*ローカル変数を宣言するだけです:

public void fractalEngine(int pxLength, String fractalRule) {
    String verifiedChoice1  = "";
    String verifiedChoice2  = "";
    String verifiedChoice3  = "";

    //Logic here..

}

これらのローカル変数は、メソッドブロックの内部でのみ表示され、メソッドの外部からは表示できません。

if`ステートメント内で言及した String`ワードを削除し、メソッド内でローカルに使用できるようにしてください。

2


これはスコープの問題です。 if句から宣言を引き出し、インスタンス化に分離する必要があります。 Javaの苦情を止めるには、おそらくnullで初期化する必要があります。

例えば:

function() {
  String verifiedChoice = null;

  if {
    verifiedChoice = ...
  }
}

「」で初期化することを好む人もいますが、後でインスタンス化するのを忘れると、後でStringオブジェクトと対話するNPE例外が発生するため、nullを選択します。

2


またこれをすることができます:

String input = null;
if((input = in.nextLine()).equals("RED")) {
// do something here
}

0


タイトルとURLをコピーしました