我正在学习Java,我需要编写一个转换罗马数字和传统整数的程序。
代码只接受字母MDCLXVI作为罗马数字。它不接受任何数字。
这是我的代码:
System.out.print("Enter a roman numeral");
Scanner keyb = new Scanner(System.in);
String roman = keyb.next();
if(roman.matches(".*[0-9].*") || **something different then M, D, C, L, X, V or I**)
{
System.out.println("Wrong! Re-type.");
}
我想解决的问题是如何编写If
的第二个条件。
答案 0 :(得分:0)
首先,我使用toLowerCase()
来小写用户输入,然后使用matches()
检查用户输入是否等于M D C L X V I
的字符。
String user_input = "M";
if (user_input.toLowerCase().matches("m|d|c|l|x|v|i")){
System.out.println("Matches");
}
答案 1 :(得分:0)
你可以用这个:
if(roman.matches(".*[0-9].*") ||
!roman.matches("[MDCLXVI]"))
这不区分大小写:
if(roman.matches(".*[0-9].*") ||
!roman.matches("(?i)[MDCLXVI]"))
答案 2 :(得分:0)
首先,您必须检查给定的罗马数字是否有效。所以该方法可能如下所示:
public static boolean isValid(String romanNumber) {
String pattern = "[m|d|c|l|x|v|i]*";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(romanNumber);
return m.matches();
}
然后你可以在转换器方法中使用这个。完成此操作后,必须转换罗马字符串中的每个字符。因此,您可以通过创建一个开关函数来继续,该函数可以在for循环中使用。
public static int convertCharacter(String romanNumber, int position) {
char c = romanNumber.charAt(position);
switch (c) {
case 'm':
return 1000;
case 'd':
return 500;
case 'c':
return 100;
case 'l':
return 50;
case 'x':
return 10;
case 'v':
return 5;
case 'i':
return 1;
default:
return 0;
}
}
由于您不熟悉Java,我将向您展示如何编写转换器方法。这个不是最好的解决方案,但它对我有用。使用这个,也可以转换像“MCMXCIX”这样的数字。
我删除了评论。因此,请尝试了解代码的作用。否则你就不会从中吸取教训。
public static int convertRomanNumber(String romanNumber) {
romanNumber = romanNumber.toLowerCase();
if (!isValid(romanNumber)) {
System.out.println("Invalid character detected");
System.exit(0);
}
int result = 0;
int currentNumber;
int nextNumber;
for (int i = 0; i < romanNumber.length(); i++) {
currentNumber = convertCharacter(romanNumber, i);
if (i < romanNumber.length() - 1) {
nextNumber = convertCharacter(romanNumber, i + 1);
if (nextNumber > currentNumber) {
result += currentNumber * -1;
} else {
result += currentNumber;
}
} else {
result += currentNumber;
}
}
System.out.println("Your input: " + romanNumber.toUpperCase());
return result;
}
我希望它对未来有所帮助。
一切顺利。