我正在做我的第一个Java项目之一,检查用户输入的单词(没有数字或符号)是否是回文。我使用了这里概述的方法:https://stackoverflow.com/a/4139065/10421526作为逻辑。该代码按请求运行,但是在输入无效后我无法重新提示用户,因为它似乎“阻止”了代码接受有效输入的能力,并打印了“重试”消息。我也尝试过do while版本,但最终出现格式错误。我认为定义stringOut变量的方式给我带来了麻烦,但是我不确定如何在不做如日食所说的重复的情况下进行更改。经过数十次尝试,这是我能得到的最接近的结果:
import java.util.Scanner;
public class PalindromTester {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.println("Input word to test: ");
String stringIn = in.nextLine();
String stringOut = new StringBuilder(stringIn).reverse().toString();
while (!stringIn.matches("[a-zA-Z]+")) {
System.out.println("Invalid input, try again.");
in.next(); //stops infinite error loop
}
if ((stringIn.equalsIgnoreCase(stringOut))) {
System.out.println("Palindrome detected");
System.out.println("You entered: " + stringIn);
System.out.println("Your string reversed is: " + stringOut);
} else {
System.out.println("Not a palindrome");
}
}
}
答案 0 :(得分:0)
一个很好的用例,可以使用do-while
循环。当您必须确保语句至少执行一次时,可以使用此循环。并且只有在满足条件时才执行后续执行。在这种情况下,该条件将是验证您的输入。
Scanner in = new Scanner(System.in);
String prompt = "Input word to test: ";
String stringIn;
do {
System.out.println(prompt);
stringIn = in.nextLine();
prompt = "Invalid input, try again.";
}
while (stringIn.matches("[a-zA-Z]+"));
如果输入为non-numeric
,则while条件将为true
,这将使此循环再次运行,因此需要新的输入。如果输入为numeric
,则while条件将为false
,因此退出while循环,并在stringIn
变量中为您提供用户输入。
答案 1 :(得分:0)
在while循环中将in.next();
更改为stringIn= in.next();
,在while循环后添加stringOut = new StringBuilder(stringIn).reverse().toString();
。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.println("Input word to test: ");
String stringIn = in.nextLine();
String stringOut = new StringBuilder(stringIn).reverse().toString();
while (!stringIn.matches("[a-zA-Z]+")) {
System.out.println("Invalid input, try again.");
stringIn= in.next(); //stops infinite error loop
}
stringOut = new StringBuilder(stringIn).reverse().toString();
if ((stringIn.equalsIgnoreCase(stringOut))) {
System.out.println("Palindrome detected");
System.out.println("You entered: " + stringIn);
System.out.println("Your string reversed is: " + stringOut);
} else {
System.out.println("Not a palindrome");
}
}
}