2012-03-01 7 views
0
if (a != 1 && solone == (int)solone && soltwo == (int)soltwo){ 
    // (lx+o)(mx+p) 
    int h = (a*c); 
    List<Integer> factors = new ArrayList<Integer>(); 
    for (int i = 1; i < Math.sqrt(h); i++) { 
     if (h % i == 0) 
      factors.add(i); 
    } 
    Integer result = null; 
    for (int ii: factors) { 
     if (b == ii + h/ii){ 
      result = ii; 
      // ax^2+hiix+iix+c 
    } 
    int hii = h/ii; 
    int gcd1 = Euclid.getGcd(a, hii); 
    int gcd2 = Euclid.getGcd(ii, c); 
    String Factored = FactoredForm.getFF(gcd1, gcd2, a, hii); 
} 

My Stringは、後で自分のコードで印刷するために使用するものです。私はforループの外側の変数を認識しないので、使用できません。公開するにはどうすればいいですか?ストリングの前にパブリックを追加したとき、ファイナルのみが許可されていると言われましたか?また、ループの一部である整数 "ii"に依存するため、外のコードをforループの外に移動することはできません。助けて!forループ内の変数がローカルで、私はそれをパブリックにしたい

+0

あなたのメソッドをもう少し分割する必要があるようなサウンドです。文字列を '返す '必要があります - そのような範囲外の変数を参照することはできません(多くの理由があります)。 –

答えて

1

本当にこれをクラスのインスタンスの状態の一部にしたいですか?私はそれを公開するためにあなたにないを助言する

private string factored; 

public void Whatever(...) 
{ 
    factored = FactoredForm.getFF(gcd1, gcd2, a, hii); 
} 

:もしそうなら、メソッドの外にそれを宣言。値を公開する必要がある場合は、プロパティを使用して値を公開します。

実際に論理的にこのクラスの状態の一部であるかどうかを注意深く考えてください。前述したように、命名規則も再訪してください。

0

public属性はローカル変数ではなくインスタンス変数とは関係ありません。宣言の

  • 順:ローカル変数がまだ宣言されていない場合、その後、あなたはそれを使用することはできません同じ関数宣言内

    は二つの規則に従ってください。

  • スコープ:スコープ内で変数が宣言されている場合({ ... })、スコープ外から変数にアクセスすることはできません。

後でコード内の変数にアクセスしたい場合は、ループの前にそれを宣言する必要があります

String factored; 
if (....) { 
    .... 
    .... 
    factored = whatever; 
} 

System.out.println(factored); 

またはそれはあなたがする必要があることをローカルなので、インスタンス変数(無意味として持っていますプリントしかし何でも):

class FooBar 
{ 
    String factored; 

    void method() { 
    ... 
    ... 
    if (...) { 
     ... 
     ... 
     factored = whatever; 
    } 

    System.out.println(factored); 
    } 
} 

または第三に、あなたがメソッドから変数を返すと、どこか別の場所にそれを使用することができます。