递归回文一遍又一遍地返回语句

时间:2016-02-15 15:24:54

标签: java recursion while-loop return palindrome

我无法弄清楚为什么,但我的程序只是一遍又一遍地返回一个语句,直到我关闭应用程序。它没有while循环,但我需要能够让他们继续输入单词或短语,直到他们选择退出。

import java.util.Scanner;
public class RecursivePalindrome{

    public static boolean recursivePalindromeTester(String str1){
        if(str1.length() == 0 || str1.length() == 1){
            return true; 
        }
        if(str1.charAt(0) == str1.charAt(str1.length()-1)){
            return recursivePalindromeTester(str1.substring(1, str1.length()-1));
        }
        return false;  
    }

    public static void main(String [] args){
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a word, phrase, or string of words.(q to quit)");
        String str1 = in.nextLine();
        str1 = str1.toLowerCase();
        while (str1 != "q"){
            if (recursivePalindromeTester(str1)){
                System.out.println(str1 + " is a palindrome");
            } else{
                System.out.println(str1 + " is not palindrome");
           }
        }
    }
}

3 个答案:

答案 0 :(得分:4)

问题是,您的str1未在while循环内更新,因此while循环变为infinite-loop

所以你需要在while循环中阅读str1

public static void main(String [] args){
    Scanner in = new Scanner(System.in);
    System.out.println("Enter a word, phrase, or string of words.(q to quit)");
    String str1 = in.nextLine();
    str1 = str1.toLowerCase();
    while (!str1.equals("q")){
        if (recursivePalindromeTester(str1)){
            System.out.println(str1 + " is a palindrome");
        } else {
            System.out.println(str1 + " is not palindrome");
        }
        System.out.println("Enter the next string.(q to quit)");
        str1 = in.nextLine(); // <--- Here you must update str1.
        str1 = str1.toLowerCase();
    }
}

答案 1 :(得分:2)

您必须以正确的方式比较您的退出字符,否则不会终止。

您的输入必须将其反转版本与回文相匹配。因此,您只需使用StringBuilder及其reverse方法即可。

public static boolean isPalindrome(String input) {
    StringBuilder builder = new StringBuilder(input);
    return input.equals(builder.reverse().toString());
}

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter a word, phrase, or string of words.(q to quit)");
    String str1 = in.nextLine();
    str1 = str1.toLowerCase();
    while (!str1.equals("q")) {
        System.out.println(str1 + (isPalindrome(str1) ? " is a palindrome" : " is not palindrome"));
        System.out.println("Enter the next string.(q to quit)");
        str1 = in.nextLine();
        str1 = str1.toLowerCase();
    }
}

答案 2 :(得分:0)

你需要在while循环中放入str1 = in.nextLine()。否则它将保持第一个值并继续触发循环。希望这会有所帮助。

 import java.util.Scanner;

 public class RecursivePalindrome{

     public static boolean recursivePalindromeTester(String str1){
         if(str1.length() == 0 || str1.length() == 1){
             return true; 
         }
         if(str1.charAt(0) == str1.charAt(str1.length()-1)){
             return recursivePalindromeTester(str1.substring(1, str1.length()-1));
         }
         return false;
     }

    public static void main(String [] args){
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a word, phrase, or string of words.(q to quit)");
        String str1 = "";
        while (str1 != "q"){
            str1 = in.nextLine();
            str1 = str1.toLowerCase();
            if(str1.equals("q")){break;}
            if (recursivePalindromeTester(str1)){
                System.out.println(str1 + " is a palindrome");
            }else{
                System.out.println(str1 + " is not palindrome");
            }
        }
    }
}