为什么我不能调用我在该类中的类中定义的方法

时间:2015-10-28 06:31:27

标签: java arrays class methods return

我正在尝试使用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是否相等。

3 个答案:

答案 0 :(得分:1)

以下行不正确:

PalindromeFinder.verifyString = pString.popStr();

pStringString,因此您无法在其上调用方法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.