2011-06-30 8 views
0

私はフラクタルを作るプログラムを作っています。ユーザーはフラクタルとはどのような色を選ぶかを考えています。唯一の問題は、 "if"ステートメントの外側でカラー変数が機能しないことです。ここに私のコードは次のとおりです。(。。問題public void fractalEngineでダウンペンの色が設定されている場所によって、これらのverifiedChoice変数は、if文の内部で開始され、コードの残りの部分に持ち越さないようだ)"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); 
    } 
} 

答えて

2

インサイドあなたのpublic void fractalEngine(int pxLength, String fractalRule)だけでローカル変数を宣言右{記号:

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

    //Logic here.. 

} 

これらのローカル変数にのみ表示内部のメソッドブロックであり、メタの外で見ることができませんod。

ifステートメントの中で言及した単語Stringを削除してください。これはメソッド内でローカルで使用できます。

+0

修正。ただし、変数のスコープがブロックに限定されているため、外部から変数にアクセスできないようにすることもできます。 – EinLama

+0

感謝します!私は文字通りこれを理解しようと何時間も画面を見てきました!それは魅力のように働いた! :D – Chris

+0

@EinLama、本当に、なぜ私はそれがローカル変数だと述べましたか?私は、OPがローカル変数が何を意味するのかを理解していると仮定しています。 –

2

これは範囲の問題です。宣言をif節から抜き出し、インスタンスと分離する必要があります。あなたはおそらくJavaで不平を言うのを止めるためにnullでそれを初期化する必要があります。例えば

:あなたが後でそれをインスタンス化することを忘れない場合は、後でStringオブジェクトと対話NPEの例外を取得しますので、

function() { 
    String verifiedChoice = null; 

    if { 
    verifiedChoice = ... 
    } 
} 

一部の人々は、しかし、私はnullを選ん「」で初期化することを好みます。

関連する問題