我正在编写这个程序,以检查用户输入的单词是否是回文(当拼写向后时,该单词读取相同的单词)。我正在使用递归,正如我给出的任务所述。显然我的递归调用是正确的,因为参数每次都在变化。然而,我收到了StackOverflow错误。我无法确定错误的原因。有什么问题?
import java.util.Scanner;
public class PalindromeChecker {
static StringBuffer mainString, tempString, chString;
static int j = 0;
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("Please input the String:");
mainString = new StringBuffer(input.nextLine());
tempString = mainString;
for(int n = 0; n < tempString.length(); n++){
if(tempString.charAt(n) == ' '){
tempString.deleteCharAt(n);
n -= 1;
}
}
chString = tempString;
tempString.reverse();
checker(j);
}
public static void checker(int k){
if(k < tempString.length()){
if(tempString.charAt(k) != chString.charAt(k)){
System.out.println("Not a Palindrome");
}
else
checker(j+1);
}
else
System.out.println("Palindrome Confirmed!");
}
}
答案 0 :(得分:2)
从我看到你永远不会改变你的j。所以每次调用j = 1都会调用。
编辑:StackOverFlowError原因通常是因为你陷入了循环。
答案 1 :(得分:0)
您的问题始于您将所有变量声明为checker(j+1);
。因此,从您的所有代码中都可以看到它们,并且您的所有代码都可能意外地访问它们并对其进行修改。
然后您的问题仍在继续调用checker(k+1);
,而您可能需要执行j
,静态变量0
为j+1
并且永远不会更改,因此{{1} }将永远是1
。所以,你的功能总是递归。
答案 2 :(得分:0)
J + 1表示:(变量j的值)+ 1。 ++ J或J ++表示将一个加到变量j。
这里的区别在于,当你执行j + 1时,你永远不会为变量J赋予新值。
因此,如果您需要先增加j,请执行以下操作:检查器(++ j) j将递增,然后传递给检查器方法
如果你需要传递j然后增加它: checker(j ++)。 j将传递给checker方法然后递增