Optimization 罗马数字。你能指出我前面的错误吗?

Optimization 罗马数字。你能指出我前面的错误吗?,optimization,roman-numerals,Optimization,Roman Numerals,我是初学者。这段代码将数字转换为罗马数字,如果不是10,则是50的倍数,如果不是9,则是0的倍数。方法是如此相互交织。你有什么建议我应该避免做的吗(只是一眼)?多谢各位 public static void main(String[] args) { System.out.println(fiftyAndAbove(37)); } public static String nineAndDown(int number) { String one = "I", f

我是初学者。这段代码将数字转换为罗马数字,如果不是10,则是50的倍数,如果不是9,则是0的倍数。方法是如此相互交织。你有什么建议我应该避免做的吗(只是一眼)?多谢各位

 public static void main(String[] args) {

     System.out.println(fiftyAndAbove(37));

 }

 public static String nineAndDown(int number) {
     String  one = "I", five = "V", ten = "X", sum = "";
     if(number == 5) {
         return five;
     } else if(number == 9) {
         return one + ten;
     }

     else if(number > 5) {
         for(int i=1; i<=number-5; i++) {
             sum += one;
         }
         return five + sum;
     } else {
         if(number == 4 ) {
             return one + five;
         } else
             for(int i=1; i <=number; i++) {
                 sum += one;
             }
     } return sum;
 }

 public static String tenAndAbove(int number) {
     int remainder = number % 10, numberOftens = number/10;
     String ten = "X", sum = "";
     if(numberOftens > 0) {
         while(numberOftens > 0) {
             sum += ten;
             numberOftens -= 1;
         }
     }
     return sum + nineAndDown(remainder);
 }

 public static String fiftyAndAbove(int number) {
     int remainder = number % 50, numberOfFifty = number/50;
    String fifty = "L", sum = "";
     if(numberOfFifty > 0) {
         while(numberOfFifty > 0) {
             sum += fifty;
             numberOfFifty -= 1;
         }
     }
     return sum + tenAndAbove(remainder);
 }
publicstaticvoidmain(字符串[]args){
System.out.println(第五个及以上(37个));
}
公共静态字符串nineAndDown(整数){
字符串one=“I”,five=“V”,ten=“X”,sum=”;
如果(数字=5){
返回五个;
}else if(数字=9){
返回1+10;
}
否则,如果(数量>5){
对于(int i=1;i 0){
总和+=十;
十位数-=1;
}
}
返回和+nineAndDown(剩余);
}
公共静态字符串fiftyAndAbove(整数){
整数余数=数字%50,NumberOf50=数字/50;
字符串五十=“L”,总和=”;
如果(数字50>0){
while(数字50>0){
总和+=五十;
数字五十-=1;
}
}
返还金额+租赁金额(剩余);
}
你有什么建议我应该避免做的吗(只是一眼)

我不会不必要地把逻辑复杂化

     if(numberOfFifty > 0) {
         while(numberOfFifty > 0) {
             …
         }
     }
这相当于

     while (numberOfFifty > 0)
     {
         …
     }
您还可以看看这个实现,看看您喜欢什么:

import java.util.Arrays;
…
 public static String fiftyAndAbove(int number)
 {
     int remainder = number%50, numberOfFifty = number/50;
     char [] Ls = new char [numberOfFifty];
     Arrays.fill(Ls, 'L');
     return new String(Ls) + tenAndAbove(remainder);
 }
在程序中有四个类似的地方,需要重复一个字符串。如果您愿意要求某个Java版本或更高版本,还可以使用中描述的方法之一;否则我建议使用一个函数来完成

你也可以考虑你是否找到了

     String  one = "I", five = "V", ten = "X", sum = "";
     if(number == 5) {
         return five;
     } else if(number == 9) {
         return one + ten;
     }
真的比

     if (number == 5) return "V";
     if (number == 9) return "IX";
您希望使用哪个Java版本?