循环中的变量是本地的,我想将其公之于众

时间:2012-03-01 23:28:48

标签: java string variables for-loop public

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);
}

我的字符串Factored是我需要在我的代码中稍后打印的字符串。我无法使用它,因为它无法识别for循环之外的变量。我如何公开?当我在字符串前添加public时,它表示只允许最终结果?另外,我不能简单地将无关代码移到for循环之外,因为它全部取决于整数“ii”,它是循环的一部分。救命啊!

2 个答案:

答案 0 :(得分:1)

你真的希望这成为班级实例状态的一部分吗?如果是这样,请在方法之外声明它:

private string factored;

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

我会建议你将其公之于众。如果需要公开值,请通过属性执行此操作。

仔细考虑它是否真的在逻辑上属于这个类的状态。如前所述,还要重新审视命名约定。

答案 1 :(得分:0)

public属性与本地变量无关,而与实例变量无关。

在相同的函数声明中遵循两个规则:

  • 声明的顺序:如果尚未声明局部变量,则无法使用它。
  • 范围:如果已在范围({ ... })内声明了变量,则无法从范围外访问它。

如果要在代码中稍后访问变量,则应在循环之前声明它:

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

System.out.println(factored);

或将其作为实例变量(无意义,因为它是您需要打印的本地但无论如何):

class FooBar
{
  String factored;

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

    System.out.println(factored);
  }
}

或者第三,你可以从方法中返回变量并在其他地方使用它:

class FooBar
{
  String method() {
    ...
    ...
    if (...) {
      ...
      ...
      return whatever;
    }

    return null;
  }

  void otherMethod() {
    String factored = method();
    System.out.println(factored);
  }

}