我正在尝试构建一个回文查找器类,该类使用字符的ArrayStack来查找传递给它的任何单词或短语中的回文。但是,当我将回文作为字符串传递给代码时,它会返回false。
我已经调试了好几次代码,甚至重新编写了程序,但我不明白为什么我的代码不能正常工作。我认为在isPalindome()方法、构造函数或实例变量中可能忽略了一些简单的东西。
public class PalindromeFinder {
ArrayStack<Character> charStack = new ArrayStack<>();
String strVerify = "";
private String strCheck;
public PalindromeFinder(String strCheck) {
strCheck = strCheck.toLowerCase();
pushStr(strCheck);
strVerify = popStr();
}
public void pushStr(String strToPush) {
for (int chVal = 0; chVal <strToPush.length(); ++chVal) {
char ch = strToPush.charAt(chVal);
ch = Character.toLowerCase(ch);
if (Character.isAlphabetic(chVal)) {
charStack.push(ch);
}
}
}
public String popStr() {
while (!charStack.empty()) {
strVerify += charStack.pop();
}
return strVerify;
}
public boolean isPalindrome() {
return strVerify == strCheck;
}
}
以下几行代码在我的程序的主要方法中返回false:
回文查找程序p=新的回文查找器("妈妈");System.out.println(p.isPalindome())
如果对我的代码有任何帮助或改进,我们将不胜感激。
在PalindromeFinder
构造函数中,您从未将strCheck
参数分配给strCheck
字段,因此当您比较isPalindrome
中的字段时,它仍然具有默认值null
。您需要在构造函数中使用以下行:
this.strCheck = strCheck;
考虑将字段声明为final
:
private final String strCheck;
这对像这样在建设后不会改变的领域有一些小好处。其中一个好处是,如果任何构造函数忘记初始化字段,编译器都会对你大喊大叫,所以它会发现这个错误并避免混乱。
您还需要稍后使用equals
而不是==
:进行字符串比较
return strVerify.equals(strCheck);
p.S.PalindromeFinder
实际上并不需要是一个类。作为一个单一的静态实用程序方法isPalindrome(String s)
,它会更简单,但无论如何。
您必须将Java中的字符串与equals()方法进行比较。
你的方法是回文应该是这样的:
public boolean isPalindrome() {
return strVerify.equals(strCheck);
}