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”,它是循环的一部分。救命啊!
答案 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);
}
}