Search code examples
javacalculatorroman-numerals

how to get a roman numeral calculator to work with negative numbers


The roman numeral calculator wont work when the result form the calculator is negative, i honestly don't know how to fix it. When the calculator gives out a positive value everything works fine for example the result will look like this

please enter the two two integer values that you want to vomplete the operation with
> 33
> 44
please enter the operation you want preformed
> +
Here is the answer 77 negative roman numeral value   Here is the answer in roman numerals
LXXVII

Code here:

public static void main(String[] args) {
  System.out.println("please enter the two two integer values that you want"
           + " to vomplete the operation with ");
  Scanner scan = new Scanner(System.in);
  int first = scan.nextInt();
  int sec = scan.nextInt();
  System.out.println(" please enter the operation you want preformed");
  String opera = scan.next();
  System.out.println(" Here is the answer");
  int value = Acalc(opera, first, sec);
  String roman = Roman(value);
  System.out.println(" Here is the answer in roman numerals ");
  System.out.println(roman);            
}

public static int Acalc(String opera, int n1, int n2){
  int result = 0;
  //Write the calulator 

 if (opera.equals("+")) {result=n1+n2;}

 if (opera.equals("-")) {result=n1-n2;}

 if (opera.equals("*")) {result=n1*n2;}

 if (opera.equals("/")) {result=n1/n2;}

 System.out.println(result);

 return result;
}

public static String Roman(double input){

  String s = "";

  if (input <1 || input < 999)
    System.out.println("negative roman numeral value ");

  while (input >= 100) {
    s += "C";
    input -= 100;
  }
  while (input >= 90) {
    s += "XC";
    input -= 90;
  }
  while (input >= 50) {
    s += "L";
    input -= 50;
  }
  while (input >= 40) {
    s += "XL";
    input -= 40;
  }
  while (input >= 10) {
    s += "X";
    input -= 10;
  }
  while (input >= 9) {
    s += "IX";
    input -= 9;
  }
  while (input >= 5) {
    s += "V";
    input -= 5;
  }
  while (input >= 4) {
    s += "IV";
    input -= 4;
  }
  while (input >= 1) {
    s += "I";
    input -= 1;
  } 
  return s;
}

Solution

  • So for what it is worth, Roman Numerals could not represent Zero or negative numbers, but the following edits should let your program do it.

    Where you have:

    if (input <1 || input < 999)
        System.out.println("negative roman numeral value ");
    

    Use:

    if (input < 0){
        s="-";
        input *= -1;
    }
    else if (input > 999)
        return "Output too large";
    else if (input == 0)
        return "nulla";
    

    Nulla is Latin for Zero, since a Roman numeral equivalent does not exist.