Java for循环中的变量是局部变量,我想将其公开 if(a!=1&&solone==(int)solone&&soltwo==(int)soltwo){ //(lx+o)(mx+p) int h=(a*c); 列表因子=新的ArrayList(); for(int i=1;i

Java for循环中的变量是局部变量,我想将其公开 if(a!=1&&solone==(int)solone&&soltwo==(int)soltwo){ //(lx+o)(mx+p) int h=(a*c); 列表因子=新的ArrayList(); for(int i=1;i,java,string,variables,for-loop,public,Java,String,Variables,For Loop,Public,我的名为Factored的字符串是我以后在代码中打印时需要使用的字符串。我不能使用它,因为它无法识别for循环之外的变量。我如何将其公开?当我在字符串前面添加public时,它说只允许final?而且,我不能简单地将无关代码移到for循环之外op,因为它完全取决于整数“ii”,它是循环的一部分。帮助!您真的希望它成为类实例状态的一部分吗?如果是,请在方法之外声明它: if (a != 1 && solone == (int)solone && soltwo ==

我的名为Factored的字符串是我以后在代码中打印时需要使用的字符串。我不能使用它,因为它无法识别for循环之外的变量。我如何将其公开?当我在字符串前面添加public时,它说只允许final?而且,我不能简单地将无关代码移到for循环之外op,因为它完全取决于整数“ii”,它是循环的一部分。帮助!

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

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);
}
我建议你不要将其公开。如果你需要公开其价值,请通过属性公开


但是,请仔细考虑它是否真的在逻辑上是此类状态的一部分。如前所述,请重新查看命名约定。

public
属性与局部变量无关,而是与实例变量相关

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

  • 声明的顺序:如果局部变量尚未声明,则不能使用它
  • 作用域:如果变量已在作用域(
    {…}
    )内声明,则无法从作用域外访问它
如果要在代码中稍后访问变量,应在循环之前声明它:

private string factored;

public void Whatever(...)
{
    factored = FactoredForm.getFF(gcd1, gcd2, a, hii);
}
或者将其作为实例变量(毫无意义,因为它是一个需要打印的本地变量,但不管怎样):

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

class FooBar
{
  String factored;

  void method() {
    ...
    ...
    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);
  }

}