首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >罗马数字。你能再进一步指出我的错误吗?

罗马数字。你能再进一步指出我的错误吗?
EN

Stack Overflow用户
提问于 2019-10-22 04:03:34
回答 1查看 20关注 0票数 0

这里是初学者。这段代码将数字转换为罗马数字,如果不是10,则转换为50的倍数,如果不是9,则转换为0。方法是如此的交织在一起。有没有什么你可以建议我避免做的事情(只是一瞥)?谢谢。

代码语言:javascript
复制
 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);
 }
EN

回答 1

Stack Overflow用户

发布于 2019-10-23 21:38:36

有没有什么你可以建议我避免做的事情(只看一眼)?

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

代码语言:javascript
复制
     if(numberOfFifty > 0) {
         while(numberOfFifty > 0) {
             …
         }
     }

这相当于

代码语言:javascript
复制
     while (numberOfFifty > 0)
     {
         …
     }

你也可以看看这个实现,看看你喜欢什么:

代码语言:javascript
复制
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中描述的方法之一;否则,我建议使用函数来实现。

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

代码语言:javascript
复制
     String  one = "I", five = "V", ten = "X", sum = "";
     if(number == 5) {
         return five;
     } else if(number == 9) {
         return one + ten;
     }

真的比

代码语言:javascript
复制
     if (number == 5) return "V";
     if (number == 9) return "IX";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58493356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档