我无法弄清楚为什么,但我的程序只是一遍又一遍地返回一个语句,直到我关闭应用程序。它没有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");
}
}
}
}
答案 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");
}
}
}
}