计算器错误
StackOverflow Error
我正在编写这个程序来检查用户输入的单词是否是回文(单词向后拼写时读起来相同)。我正在使用递归,因为我的任务是这样说明的。显然我的递归调用是正确的,因为参数每次都在变化。然而,我收到 Whosebug 错误。我无法确定错误的原因。有什么问题?
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!");
}
}
据我所知,你从不改变你的 j。因此每次 j = 1 时都会调用检查器。
编辑:WhosebugError 的原因通常是因为您陷入了循环。
您的麻烦始于您将所有变量声明为 static
。因此,它们在您的所有代码中都是可见的,并且您的所有代码都可能意外访问并修改它们。
然后你的问题继续调用 checker(j+1);
而你可能打算做 checker(k+1);
,静态变量 j
是 0
并且从未改变,所以 j+1
将永远是 1
。因此,您的函数将始终递归。
J+1表示:(变量j的值)+1。
++J或J++表示变量j加一。
这里的区别在于,当您执行 j+1 时,您永远不会为变量 J 分配新值。
因此,如果您需要先增加 j,请执行以下操作:checker(++j)
j 将递增,然后传递给检查器方法
如果您需要传递 j 然后递增它,请执行:checker(j++)。
j 将被传递给检查器方法,然后递增
我正在编写这个程序来检查用户输入的单词是否是回文(单词向后拼写时读起来相同)。我正在使用递归,因为我的任务是这样说明的。显然我的递归调用是正确的,因为参数每次都在变化。然而,我收到 Whosebug 错误。我无法确定错误的原因。有什么问题?
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!");
}
}
据我所知,你从不改变你的 j。因此每次 j = 1 时都会调用检查器。
编辑:WhosebugError 的原因通常是因为您陷入了循环。
您的麻烦始于您将所有变量声明为 static
。因此,它们在您的所有代码中都是可见的,并且您的所有代码都可能意外访问并修改它们。
然后你的问题继续调用 checker(j+1);
而你可能打算做 checker(k+1);
,静态变量 j
是 0
并且从未改变,所以 j+1
将永远是 1
。因此,您的函数将始终递归。
J+1表示:(变量j的值)+1。 ++J或J++表示变量j加一。
这里的区别在于,当您执行 j+1 时,您永远不会为变量 J 分配新值。
因此,如果您需要先增加 j,请执行以下操作:checker(++j) j 将递增,然后传递给检查器方法
如果您需要传递 j 然后递增它,请执行:checker(j++)。 j 将被传递给检查器方法,然后递增