我有一个任务要编写一个回文检查器,它可以循环回到自身并且还包含一个 quit 语句。我不确定为什么我想出的方法不起作用。它会工作一次,但随后将所有答案默认为“否”,退出语句根本不起作用。
public static void main(String[] args)
{
Scanner stdln = new Scanner(System.in);
String original, oposite = "";
System.out.printf("Please enter something to see if it is a palindrome.%nEnter \"q\" to stop.%n");
original = stdln.nextLine();
while (original !="q")
{
int length = original.length();
for ( int i = length - 1; i >= 0; i-- )
oposite = oposite + original.charAt(i);
if (original.equals(oposite))
System.out.println("It is a palindrome.");
else
System.out.println("It is not a palindrome.");
System.out.printf("Please enter a something to see if it is a palindrome.%nEnter \"quit\" to stop.%n");
original = stdln.nextLine();`
}
} }
我的想法是,如果用户输入“q”,那么进程将无法运行,因为这是 while 语句的条件。相反,它会检查 q 是否为回文。第二个问题是,一旦它运行一次,所有后续条目都会导致 else 语句。我真的不确定我错过了什么。`
在while循环的顶部重新设置oposite:oposite = "";否则,每次循环循环时,您都会向 String 添加越来越多的文本
此外,不要使用
==
或 !=
比较字符串。请改用 equals(...)
或 equalsIgnoreCase(...)
方法。了解 ==
检查两个 object references 是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这才是最重要的在这里。
所以,
while (!original.equalsIgnoreCase("q")) {
int length = original.length();
// ****** add this ******
oposite = "";
for ( int i = length - 1; i >= 0; i-- ) {
oposite = oposite + original.charAt(i);
}
if (original.equals(oposite)) {
System.out.println("It is a palindrome.");
} else {
System.out.println("It is not a palindrome.");
}
System.out.printf("Please enter a something to see if it is a palindrome.%nEnter \"quit\" to stop.%n");
original = stdln.nextLine();`
}
此外,始终在每个代码块(甚至单行代码)周围包含花括号是个好主意,以避免出现常见错误。