Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复Java回文程序中的错误?_Java_String_Recursion_Boolean_Palindrome - Fatal编程技术网

如何修复Java回文程序中的错误?

如何修复Java回文程序中的错误?,java,string,recursion,boolean,palindrome,Java,String,Recursion,Boolean,Palindrome,我的回文程序一直出错。代码如下所示: public static boolean isPalindrome_r(String word){ int beginning = 0; int end = word.length() - 1; if(word.charAt(beginning) == word.charAt(end)){ return (isPalindrome_r(word.substring(1, word.length() - 1)));

我的回文程序一直出错。代码如下所示:

public static boolean isPalindrome_r(String word){
    int beginning = 0;
    int end = word.length() - 1;

    if(word.charAt(beginning) == word.charAt(end)){
        return (isPalindrome_r(word.substring(1, word.length() - 1)));
    }
    else if (word.charAt(beginning) != word.charAt(end)){
        return false;
    }

    return false;
}

public static boolean isPalindrome_nr(String word){
    int beginning = 0;
    int end = word.length() - 1;

    boolean pd = true;

    for (int i = end; i>=0; i--){
        if(word.charAt(i) != word.charAt(end-i)){
            pd = false;
        }
    }

    return pd;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("Is the string a palindrome or not? ");
    String test = "test";
    String test_2 = "level";
    String test_3 = "application";
    System.out.println("Answer: " + isPalindrome_r(test));
    System.out.println("Answer: " + isPalindrome_r(test_2));
    System.out.println("Answer: " + isPalindrome_r(test_3));
    System.out.println("Answer: " + isPalindrome_nr(test));
    System.out.println("Answer: " + isPalindrome_nr(test_2));
    System.out.println("Answer: " + isPalindrome_nr(test_3));

}
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at assignment1cs.recursion.isPalindrome_r(recursion.java:12)
at assignment1cs.recursion.isPalindrome_r(recursion.java:12)
at assignment1cs.recursion.isPalindrome_r(recursion.java:12)
at assignment1cs.recursion.main(recursion.java:80)
递归版本上与测试_2相关的错误输出如下所示:

public static boolean isPalindrome_r(String word){
    int beginning = 0;
    int end = word.length() - 1;

    if(word.charAt(beginning) == word.charAt(end)){
        return (isPalindrome_r(word.substring(1, word.length() - 1)));
    }
    else if (word.charAt(beginning) != word.charAt(end)){
        return false;
    }

    return false;
}

public static boolean isPalindrome_nr(String word){
    int beginning = 0;
    int end = word.length() - 1;

    boolean pd = true;

    for (int i = end; i>=0; i--){
        if(word.charAt(i) != word.charAt(end-i)){
            pd = false;
        }
    }

    return pd;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("Is the string a palindrome or not? ");
    String test = "test";
    String test_2 = "level";
    String test_3 = "application";
    System.out.println("Answer: " + isPalindrome_r(test));
    System.out.println("Answer: " + isPalindrome_r(test_2));
    System.out.println("Answer: " + isPalindrome_r(test_3));
    System.out.println("Answer: " + isPalindrome_nr(test));
    System.out.println("Answer: " + isPalindrome_nr(test_2));
    System.out.println("Answer: " + isPalindrome_nr(test_3));

}
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at assignment1cs.recursion.isPalindrome_r(recursion.java:12)
at assignment1cs.recursion.isPalindrome_r(recursion.java:12)
at assignment1cs.recursion.isPalindrome_r(recursion.java:12)
at assignment1cs.recursion.main(recursion.java:80)
如何修复此问题?

尝试此方法(重要的是不要忘记s.length()小于2时的情况):

试试这个(重要的是不要忘记s.length()小于2时的情况):

试试这个(重要的是不要忘记s.length()小于2时的情况):

试试这个(重要的是不要忘记s.length()小于2时的情况):


你没有停止的条件。如果剩余字符串长度小于4,则应终止递归

如果长度为1,则返回true。

如果长度为2或3,如果first=last,则返回true。

您没有停止条件。如果剩余字符串长度小于4,则应终止递归

如果长度为1,则返回true。

如果长度为2或3,如果first=last,则返回true。

您没有停止条件。如果剩余字符串长度小于4,则应终止递归

如果长度为1,则返回true。

如果长度为2或3,如果first=last,则返回true。

您没有停止条件。如果剩余字符串长度小于4,则应终止递归

如果长度为1,则返回true。

如果长度为2或3,如果first=last,则返回true。

经过几轮执行后,由
word.substring(1,word.length()-1)
生成的子字符串的长度可能为0

因此,在递归的下一次迭代中:
int end=word.length()-1将为-1

word.charAt(开始)==word.charAt(结束)
将是
word.charAt(0)==word.charAt(-1)
,因此导致您看到的运行时错误。

经过几轮执行后,
word.substring(1,word.length()-1)
生成的子字符串的长度可能为0

因此,在递归的下一次迭代中:
int end=word.length()-1将为-1

word.charAt(开始)==word.charAt(结束)
将是
word.charAt(0)==word.charAt(-1)
,因此导致您看到的运行时错误。

经过几轮执行后,
word.substring(1,word.length()-1)
生成的子字符串的长度可能为0

因此,在递归的下一次迭代中:
int end=word.length()-1将为-1

word.charAt(开始)==word.charAt(结束)
将是
word.charAt(0)==word.charAt(-1)
,因此导致您看到的运行时错误。

经过几轮执行后,
word.substring(1,word.length()-1)
生成的子字符串的长度可能为0

因此,在递归的下一次迭代中:
int end=word.length()-1将为-1

word.charAt(开始)==word.charAt(结束)
将是
word.charAt(0)==word.charAt(-1)
,因此会导致您看到的运行时错误。

给出答案是不好的。这个网站不适合不能做家庭作业的人。很明显,你紧凑的方式会让老师发疯。没问题,你说得对。但是,他很接近,这就是我回答的原因。你可以提出一些想法或提示,帮助OP更接近答案。:)把答案泄露出去是不好的。这个网站不适合不能做家庭作业的人。很明显,你紧凑的方式会让老师发疯。没问题,你说得对。但是,他很接近,这就是我回答的原因。你可以提出一些想法或提示,帮助OP更接近答案。:)把答案泄露出去是不好的。这个网站不适合不能做家庭作业的人。很明显,你紧凑的方式会让老师发疯。没问题,你说得对。但是,他很接近,这就是我回答的原因。你可以提出一些想法或提示,帮助OP更接近答案。:)把答案泄露出去是不好的。这个网站不适合不能做家庭作业的人。很明显,你紧凑的方式会让老师发疯。没问题,你说得对。但是,他很接近,这就是我回答的原因。你可以提出一些想法或提示,帮助OP更接近答案。:)