我正在尝试使用ArrayStack制作回文查找器类。我几乎想出了怎么做,但我想知道为什么我不能在类中调用我的popStr()方法。代码如下:
public class PalindromeFinder{
private static StackInt<Character> pCheck = new ArrayStack<>();
private static String pString;
private static String verifyString;
public PalindromeFinder(String pString){
PalindromeFinder.pushStr(pString.toLowerCase());
PalindromeFinder.verifyString = pString.popStr();
}
public static void pushStr(String pushString){
for (int i = 0; i < pushString.length(); i++){
char ch = pushString.charAt(i);
pCheck.push(ch);
}
}
public static String popStr(){
while (!pCheck.empty()){
verifyString += pCheck.pop();
}
return verifyString;
}
public boolean palindromeCheck(String popStr){
return popStr.equals(pString);
}
}
读取'PalindromeFinder.verifyString = pString.popStr();'的行给我一个错误,说'找不到符号。符号:方法popStr(); location:String类型的变量pString。有谁知道为什么会这样?我只是希望能够获取popStr()的返回值并在boolean语句中使用它来确定pString和verifyString是否相等。
答案 0 :(得分:1)
以下行不正确:
PalindromeFinder.verifyString = pString.popStr();
pString
是String
,因此您无法在其上调用方法popStr()
。 (popStr()
不是String
类定义的方法。这是您的方法之一。)
答案 1 :(得分:0)
使用
PalindromeFinder.verifyString = popStr();
insted of
PalindromeFinder.verifyString = pString.popStr();
答案 2 :(得分:0)
更改构造函数,可以直接调用方法popStr()
public PalindromeFinder(String pString){
PalindromeFinder.pushStr(pString.toLowerCase());
PalindromeFinder.verifyString = popStr();
}
除此之外,在类中声明所有方法和实例变量为静态是没有意义的(取消OOP的目的)。如果出于某种原因,请注意您的类的所有实例将共享可能导致数据丢失的变量,例如,如果您声明了两个实例。
PalindromeFinder p1=new PalindromeFinder("some string 1");
PalindromeFinder p2=new PalindromeFinder("some string 2"); //data given by p1 is now lost since the variable that stores the passed parameter is static in the class and is overwritten by value in p2.