Advertisement
Guest User

Untitled

a guest
Nov 21st, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.34 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class roman_calculator {
  4.  
  5.     Scanner scan = new Scanner(System.in);
  6.    
  7.     boolean doCalculation()
  8.     {
  9.         char operator;
  10.         int operand1, operand2, answer;
  11.         operator = getOperator();
  12.         if (operator == 'q')
  13.             return false;
  14.         do {
  15.         operand1 = getOperand(1);
  16.         } while (operand1 == -1);
  17.        
  18.         do {
  19.         operand2 = getOperand(2);
  20.         } while (operand2 == -1);
  21.         //System.out.println(operand1 + operator + operand2);
  22.        
  23.         answer = doArtithmetic(operand1, operand2, operator);
  24.        
  25.         System.out.print("Answer= " + convert_to_Roman(answer, operator));
  26.        
  27.         return true;
  28.     }
  29.    
  30.     char getOperator()
  31.     {
  32.         char operator = 'q';
  33.         //user operator
  34.         boolean operator_is_good=false;
  35.        
  36.         do {
  37.             System.out.print("Enter an Operator: + - * / q for quit: ");
  38.             String strOperator = scan.nextLine();
  39.             strOperator = strOperator.trim();
  40.             if (strOperator.length() == 0)
  41.                 continue;
  42.             operator = strOperator.charAt(0);
  43.             operator_is_good=false;
  44.            
  45.             switch (operator) {
  46.             case 'q':
  47.             case '+':
  48.             case '-':
  49.             case '*':
  50.             case '/':
  51.                 operator_is_good = true;
  52.                 break;
  53.             default:
  54.                 System.out.println("Your operator is bad ... try again:");
  55.                 break;
  56.             }
  57.         } while (!operator_is_good);
  58.         return operator;
  59.     }
  60.     // This routine prompts the user for either operand1 or operand2
  61.     // depending on the value of which.  This routine uppercases the
  62.     // input and calls convert_from_Roman to create an integer.
  63.     // If the input is invalid ( negative return from convert_from_Roman)
  64.     // then complain and prompt the user again.
  65.     int getOperand(int which)
  66.     {
  67.         System.out.print("Enter Operand "+which + ":");
  68.        
  69.         String input;
  70.        
  71.        
  72.         input = scan.nextLine();
  73.         input = input.toUpperCase();
  74.         int value = convert_from_Roman(input);
  75.        
  76.         return value;
  77.    
  78.     }
  79.    
  80.     // Routine to convert an integer to a Roman Numeral String.    
  81.     // When you do this routine, you might find it handy to
  82.     // create a utility routine that looks like:
  83.     //  String addRomanDigit(String starting, int num, char digit)
  84.     String convert_to_Roman(int value, char operator)
  85.     {
  86.         String roman ="";
  87.  
  88.         while (value != 0) {
  89.             if (value >= 1000) {
  90.                 roman = roman + 'M';
  91.                 value = value - 1000;
  92.             }
  93.             else if (value >= 500) {
  94.                 roman = roman + 'D';
  95.                 value = value - 500;
  96.             }
  97.             else if (value >= 100) {
  98.                 roman = roman + 'C';
  99.                 value = value - 100;
  100.             }
  101.             else if (value >= 50) {
  102.                 roman = roman + 'L';
  103.                 value = value - 50;
  104.             }
  105.             else if (value >= 10) {
  106.                 roman = roman + 'X';
  107.                 value = value - 10;
  108.             }
  109.             else if (value >=5) {
  110.                 roman = roman + 'V';
  111.                 value = value - 5;
  112.             }
  113.             else if (value >= 1) {
  114.                 roman = roman + 'I';
  115.                 value = value - 1;
  116.             }
  117.         }
  118.        
  119.         return roman;
  120.        
  121.     }
  122.  
  123.     // Convert Roman Numeral String to an integer.  If the
  124.     // Roman Numeral String is invalid, return -1
  125.     int convert_from_Roman(String value)
  126.     {
  127.         int numValue = 0;
  128.         value = value.trim(); //value = IV
  129.         int len = value.length(); //len = 2
  130.        
  131.         for (int i=0; i<len; i++)
  132.         {
  133.             char location = value.charAt(i);
  134.             //System.out.println(value.charAt(i));
  135.             if (location == 'I')
  136.                 numValue = numValue + 1;
  137.             else if (location == 'V')
  138.                 numValue = numValue + 5;
  139.             else if (location == 'X')
  140.                 numValue = numValue + 10;
  141.             else if (location == 'L')
  142.                 numValue = numValue + 50;
  143.             else if (location == 'C')
  144.                 numValue = numValue + 100;
  145.             else if (location == 'D')
  146.                 numValue = numValue + 500;
  147.             else if (location == 'M')
  148.                 numValue = numValue + 1000;
  149.             else {
  150.                 numValue = -1;
  151.                 System.out.println(value + " has a bad character at position: " + i);
  152.                 return numValue;
  153.            
  154.             }
  155.  
  156.         }
  157.         //System.out.println(numValue);
  158.        
  159.         return numValue;
  160.        
  161.     }
  162.    
  163.     int doArtithmetic(int operand1, int operand2, char operator)
  164.     {
  165.         int answer = 0;
  166.         //logic to compute answer
  167.         switch (operator) {
  168.         case '+':
  169.             answer = operand1 + operand2;
  170.             break;
  171.         case '-':
  172.             answer = operand1 - operand2;
  173.             break;
  174.         case '/':
  175.             answer = operand1 / operand2;
  176.             break;
  177.         case '*':
  178.             answer = operand1 * operand2;
  179.             break;
  180.        
  181.         }
  182.        
  183.         return answer;
  184.     }
  185.    
  186.     public static void main(String[] args) {
  187.         roman_calculator rc = new roman_calculator();
  188.         while (rc.doCalculation())
  189.         {
  190.             System.out.println();
  191.         }
  192.         System.out.println("Finished Roman Computations");
  193.        
  194.     }
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement