对于像“madam”、“madama”等简单的单词,代码可以正常工作,但对于像“babzsákfotelben 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
之后,您打印“Yes”并跳出循环。
您应该做的是声明一个用值 true
初始化的 boolean 变量。在循环内,在任何迭代中,如果 if
条件的计算结果为 true
,则将该 boolean 变量的值设置为 false
并跳出循环.
循环结束后,检查 boolean 变量的值是否仍然是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");
}
关于java - 在 Java 中检查单词是否为回文时如何正确使用 charAt()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64621449/