在我的主要方法中,我有代码..
String FactoredForm = FactoredForm.getFF(gcd1, gcd2, a, hii);
FactoredForm类是:
public class FactoredForm {
public static String forName(int l, int o, int a, int hii) {
// (lx+o)(mx+p
String FF1, FF2;
if (o > 0){
FF1 = ("(" + l + "x+" + o + ")");
}
else{
FF1 = ("(" + l + "x" + o + ")");
}
if (hii/o > 0){
FF2 = ("(" + a/l + "x+" + hii/o + ")");
}
else{
FF2 = ("(" + a/l + "x" + hii/o + ")");
}
String FactoredForm = (FF1+FF2);
return FactoredForm;
}
}
我得到的错误是String类型的方法getFF未定义。我错过了什么吗?
答案 0 :(得分:6)
是的,您的方法定义为forName()
,但您正在调用getFF()
。
此外,您不想做:
String FactoredForm = (FF1+FF2);
FactoredForm
是您班级的名称。只需用以下方法替换方法的最后两行:
return FF1 + FF2;
答案 1 :(得分:5)
您不能将String名称与类名相同。这导致了错误。
答案 2 :(得分:3)
这里有两个错误:
在调用代码中,您声明了一个与类同名的变量,因此当您在方法调用中使用相同的名称时,编译器会认为您正在讨论该变量。并不是说你不能声明一个带有该名称的变量 - 只是在这一点上你必须不遗余力地明确地引用这个类。
您正在尝试调用不存在的方法(getFF
而不是forName
)
此外,声明一个局部变量与该类具有相同的名称会产生非常难以理解的代码。它不是不正确的,只是一个坏主意。
你真正 要做的就是使用正确的方法名称并说服编译器你正在谈论的是类,而不是变量:
// Assuming FactoredForm is in the foo package
String FactoredForm = foo.FactoredForm.forName(gcd1, gcd2, a, hii);
...但是使用更常规的变量名称(例如factoredForm
)将是一个非常好的主意。 (通常,Java中的变量为camelCased
。)
如果FactoredForm
位于顶级软件包中,上述解决方法将无效,但我认为这也是另一种不好的做法。
答案 3 :(得分:0)
您需要将方法命名为与您正在进行的通话相匹配:
public class FactoredForm {
public static String getFF(int l, int o, int a, int hii) {
...