对于"夫人"madama";代码正在工作,但对于较长的字符串,如";babzsákpotelben sok a bab"返回错误答案。
Scanner sc = new Scanner(System.in);
String A = sc.nextLine();
String myString = A.toLowerCase().replaceAll("\s", "");
int i = 0;
int j = myString.length() - 1;
while (i < j) {
if (myString.charAt(i) != myString.charAt(j)) {
System.out.println("No");
break;
}
i++;
j--;
System.out.println("Yes");
break;
}
}
}
当前代码中的问题是您的循环只执行一次,因为在递增i
和递减j
之后,您将打印"是";并脱离循环。
您应该声明一个用值true
初始化的布尔变量。在循环内部,在任何迭代中,如果if
条件的求值结果为true
,则将该布尔变量的值设置为false
,并脱离循环。
循环结束后,检查布尔变量的值是否仍然是true
。若它是,那个么字符串就是回文,否则就不是。
int i = 0;
int j = myString.length() - 1;
boolean isPalindrome = true;
while (i < j) {
if (myString.charAt(i) != myString.charAt(j)) {
isPalindrome = false;
break;
}
i++;
j--;
}
if (isPalindrome) {
System.out.println("Yes");
} else {
System.out.println("No");
}
**您可以使用for循环代替while循环,也可以使用StringBuilder代替字符串。情况如下:
**
public class Palindrome {
public static void main(String[] args) {
//Creating an instance of scanner class
Scanner scan = new Scanner(System.in);
//Creating an instance of StringBuilder class
StringBuilder str = new StringBuilder();
//Asking for input
System.out.println("Please Enter the Word: ");
//Getting Input
String word = scan.next();
/*
*
* Palindrome Check
*
*/
for (int i = word.length() - 1; i >= 0; i--) {
str.append(word.charAt(i));
}
if (word.equalsIgnoreCase(String.valueOf(str))) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}