首页 > 解决方案 > 罗马数字。你能在以后指出我的错误吗?

问题描述

初学者在这里。这段代码将数字转换为罗马数字,如果不是 10,如果不是 9,则为 50 的倍数,然后向下转换为 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);
 }

标签: optimizationroman-numerals

解决方案


有什么(一目了然)你可以建议我应该避免做的事情吗?

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

     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 版本或更高版本,您还可以使用Java 中描述的方法之一: String - add character n-times;否则我建议使用一个函数来做到这一点。

你也可以想想你是否找到

     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";

推荐阅读