我正在为一个java类编写这个程序。该程序的目的是将阿拉伯数字输入转换为罗马数字。
这是我的代码:
import java.util.Scanner;
public class RomanDigit{
public static void main(String arg []){
System.out.println("Please enter a number to be converted to roman numerals: ");
Scanner scan = new Scanner (System.in);
int number = scan.nextInt();
String romanDigit = "";
if (number < 0 || number > 3999) {
System.out.println( "This number cannot be converted");
}
else
{
System.out.println("The number you input, converted into roman numerals is: " + romanDigit);
System.out.println(convert(number));
}
}
public static String romanDigit(int n, String one, String five, String ten){
if(n >= 1)
{
if(n == 1)
{
return one;
}
else if (n == 2)
{
return one + one;
}
else if (n == 3)
{
return one + one + one;
}
else if (n==4)
{
return one + five;
}
else if (n == 5)
{
return five;
}
else if (n == 6)
{
return five + one;
}
else if (n == 7)
{
return five + one + one;
}
else if (n == 8)
{
return five + one + one + one;
}
else if (n == 9)
{
return one + ten;
}
}
return "";
}
public static String convert(int number){
String romanOnes = romanDigit( number%10, "I", "V", "X");
number /=10;
String romanTens = romanDigit( number%10, "X", "L", "C");
number /=10;
String romanHundreds = romanDigit(number%10, "C", "D", "M");
number /=10;
String romanThousands = romanDigit(number%10, "M", "", "");
String result = romanThousands + romanHundreds + romanTens + romanOnes;
return result;
}
}
我现在为给定的建议编辑了代码。我注意到我错过了数字/ = 10;声明到底。由于某种原因,我之前删除它,忘了把它放回去。现在似乎工作正常。它除了数字/ = 10语句之外没有工作的原因是我在错误的地方使用了If语句。
答案 0 :(得分:2)
您应该将convert
方法更改为此类似的方法。
public static String convert(int number) {
if (number < 0 || number > 3999) {
return "This number cannot be converted";
}
String romanOnes = romanDigit(number % 10, "I", "V", "X");
number /= 10;
String romanTens = romanDigit(number % 10, "X", "L", "C");
number /= 10;
String romanHundreds = romanDigit(number % 10, "C", "D", "M");
number /= 10;
String romanThousands = romanDigit(number % 10, "M", "", "");
number /= 10;
String result = romanThousands + romanHundreds + romanTens + romanOnes;
return result;
}
此外,您应该从romanDigit
方法中删除检查是大于零且小于4000的数字。
正如@eis注意到的那样,检查确实一个数字对于您应该在convert
方法之外检查的转换有效。在这种情况下,在main方法中。