我正在尝试构建一个罗马数字计算器,并已完成了主要编码工作。现在,我想添加一个功能来检查用户输入的字符串是否包含非法字符。为此,我创建了一个名为isValidRomanNumeral
的方法来验证每个字符。
下面是isValidRomanNumeral
方法的代码:
public static boolean isValidRomanNumeral(String letter) {
String validChars = "IVXLCDM";
return validChars.contains(letter);
}
接下来,我希望当用户输入不合法时,程序能够打印错误消息并重新提示用户输入,直到输入被认为是可接受的。
以下是一个示例代码,展示了如何使用无限循环和Scanner
类来实现这一目标:
import java.util.Scanner;
public class RomanNumeralValidator {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.print("请输入罗马数字: ");
String romanNumeral = scanner.nextLine();
boolean isValid = true;
for (int i = 0; i if (!isValidRomanNumeral(Character.toString(romanNumeral.charAt(i)))) {
System.out.println("输入错误:意外字符。");
isValid = false;
break;
}
}
if (isValid) {
// 处理有效输入
System.out.println("有效的罗马数字: " + romanNumeral);
break;
}
}
}
}
public static boolean isValidRomanNumeral(String letter) {
String validChars = "IVXLCDM";
return validChars.contains(letter);
}
}
这段代码使用了try-with-resources
语句来确保Scanner
对象在不再需要时自动关闭。它还使用正则表达式来验证输入是否只包含合法的罗马数字字符(I、V、X、L、C、D、M)。如果输入包含任何非法字符,程序会提示用户重新输入,直到输入合法为止。
对于初学者来说,理解循环的工作原理以及如何从循环中返回值非常重要。在这个例子中,我们使用了while (true)
创建了一个无限循环,并在输入合法时通过break
语句退出循环。