0

Beginner here. This piece of code converts number into roman numerals in multiples of 50 if not 10 if not 9 and down to 0. Methods are so intertwined. Is there something (just at a glance) you could suggest I should avoid doing? Thank You.

 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);
 }
Ömürcan Cengiz
  • 2,085
  • 3
  • 22
  • 28
Oscar1234
  • 1
  • 1

1 Answers1

0

Is there something (just at a glance) you could suggest I should avoid doing?

I'd not unnecessarily complicate the logic as with

     if(numberOfFifty > 0) {
         while(numberOfFifty > 0) {
             …
         }
     }

which is equivalent to

     while (numberOfFifty > 0)
     {
         …
     }

You could also have a look at this implementation and see what you prefer:

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);
 }

You have four places like this in your program where you need a string of a character repeated. If you're willing to require a certain Java version or above, you can also use one of the methods described at Java: String - add character n-times; otherwise I'd suggest to use a function to do it.

You could also think about whether you find

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

really better than

     if (number == 5) return "V";
     if (number == 9) return "IX";
Armali
  • 18,255
  • 14
  • 57
  • 171