Римские цифры. Не могли бы вы указать на мои ошибки в будущем? - PullRequest
0 голосов
/ 21 октября 2019

Начинающий здесь. Этот фрагмент кода преобразует число в римские цифры, кратные 50, если не 10, если не 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);
 }

1 Ответ

0 голосов
/ 23 октября 2019

Есть ли что-то (на первый взгляд), которое вы могли бы посоветовать мне не делать?

Я бы не стал излишне усложнять логику, как с

     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 - добавить символ n раз ;в противном случае я бы предложил использовать для этого функцию.

Вы также можете подумать о том, считаете ли вы

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