1

I am having trouble with a programming assignment for computer science class. The program is to add to roman numerals. I don't know how to get started with the code that actually adds the roman numbers together and outputs the sum of the two numbers: here is the code that i have so far for the main program:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

/**
 * Class RomanNumeralCalculator - write a description of the class here
 * 
 * @author (your name) 
 * @version (a version number)
*/
public class RomanNumeralCalculator extends JFrame
{
   public static JPanel panel1, panel2, panel3, panel4;
   public static JLabel main1, main2, label1, label2,label3,label4,image;
   public static JTextField number1, number2;
   public static JTextArea output;
   public static JButton calculate,exit;
   public static String input="Enter"; 
   public static int position;
String num="";
public RomanNumeralCalculator()
{
    super ("Roman Numeral Calculator");
    setSize(1045,740);
    setLocation(0,0);
    Container container = getContentPane();
    container.setBackground(Color.GREEN);

    JLabel image=new JLabel(new ImageIcon("romanNumerals.jpg"));

    panel1=new JPanel();
    panel2=new JPanel();
    panel3=new JPanel();
    panel4=new JPanel();

    panel1.setLayout(new GridLayout(2,7));
    panel1.setBackground(Color.GREEN);
    panel2.setLayout(new FlowLayout());
    panel2.setBackground(Color.MAGENTA);
    panel3.setLayout(new FlowLayout());
    panel3.setBackground(Color.YELLOW);
    panel4.setLayout(new FlowLayout());
    panel4.setBackground(Color.GRAY);

    JLabel main1=new JLabel("Welcome To The Roman Numerals Calculator");
    JLabel main2=new JLabel("BY: Harpreet Singh, Date: 31/10/2013");

    label3=new JLabel("Here are the following numbers that can be used in the calculator:");
    label4=new JLabel("I=1 , V=5 , X=10 , L=50 , C=100 , D=500 , M=1000");

    calculate=new JButton("Calculate");
    exit=new JButton("Exit");

    ButtonHandler handler = new ButtonHandler();
    calculate.addActionListener(handler);
    exit.addActionListener(handler);

    label1=new JLabel("Enter first number in roman numerals:");
    number1=new JTextField("",10);
    label2=new JLabel("Enter second number in roman numerals:");
    number2=new JTextField("",10);

    output=new JTextArea(10,100);
    output.setEditable(false);

    container.setLayout(new BorderLayout());
    container.add(panel1, BorderLayout.NORTH);
    container.add(panel2, BorderLayout.CENTER);
    container.add(panel3, BorderLayout.SOUTH);

    panel1.add(main1);
    panel1.add(main2);
    panel1.add(image);
    panel2.add(label3);
    panel2.add(label4);
    panel3.add(label1);
    panel3.add(number1);
    panel3.add(label2);
    panel3.add(number2);
    panel3.add(calculate);        
    panel3.add(exit);

    setVisible(true);
}

public class ButtonHandler implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource()==calculate)
        {
            String num1=number1.getText();
            String num2=number2.getText();
            CalculateNumbers x=new CalculateNumbers();
            x.calculations(num1,num2);
        }
        else if (e.getSource()==exit)
        {
            System.exit(0);
        }
    }
}

public static void main (String args[])
{
    /*String choice=JOptionPane.showInputDialog(null, "Please Type In 'Enter' to Continue: ", "Enter", JOptionPane.PLAIN_MESSAGE);
    if ((choice == null) || ((choice != null) && !(choice.equalsIgnoreCase(input))))
    {
    JOptionPane.showMessageDialog(null, "Invalid Password. Please Try Again.");
    System.exit(0);
    }*/
    //else
    //{
    //JOptionPane.showMessageDialog(null, "Correct Password");
    RomanNumeralCalculator application = new RomanNumeralCalculator();
    //}
}

}

Matthew R.
  • 4,332
  • 1
  • 24
  • 39
help for ICS
  • 31
  • 2
  • 8
  • 1
    Hint: Convert them to regular numbers first. – SLaks Nov 05 '13 at 15:11
  • 3
    You'll want two functions: One that takes a String (the roman numeral) and returns a number, and the other that takes a number and returns a String (the roman numeral). So you'd take your two inputs, pass them to your first function to convert to numbers, add them together, then pass the result to your second function to get the result as a roman numeral. – Anthony Grist Nov 05 '13 at 15:12
  • Use a switch, map, or implement a parser to convert the numbers. – Zong Nov 05 '13 at 15:12
  • how would i do that because my main way of entering numbers is a text field – help for ICS Nov 05 '13 at 15:14

3 Answers3

4

first write two methods

  1. convert Roman number to regular number
  2. convert regular number to roman number

when ever user provide input in roman number convert them to regular number perform arithmetic operation and finally convert the result to roman number

Also check Converting Roman Numerals To Decimal and Convert Int to Roman Numeral

Community
  • 1
  • 1
upog
  • 4,965
  • 8
  • 42
  • 81
0

Create a roman number class that will convert your number given a decimal number and vise versa. You can even make it static if you want.

This will make your code look nicer and more object oriented.

There is an algorithm explained here.

roman number algorithm

Montaldo
  • 863
  • 8
  • 16
0
       import java.util.Scanner;

        public class Roman {

        public static void main(String[] args) {

        Scanner stdIn = new Scanner(System.in);

         System.out.print("Enter a Roman Number:> ");

          char[] roman = stdIn.nextLine().toCharArray();

    int total = 0;
    for(int i = roman.length-1; i > -1; i--){
        switch(roman[i]){
            case 'I':
                total += value(roman[i]); break;
            case 'V':
            case 'X':
            case 'L':
            case 'C':
            case 'D':
            case 'M':
                if(i != 0 && (value(roman[i-1]) < value(roman[i]))){
                    total += value(roman[i]) - value(roman[i-1]);
                    i--;
                }else{
                    total += value(roman[i]);
                }
                break;
        }
    }
    System.out.println(total);
}

public static int value(char c){
    switch(c){
        case 'I':
            return 1;
        case 'V':
            return 5;
        case 'X':
            return 10;
        case 'L':
            return 50;
        case 'C':
            return 100;
        case 'D':
            return 500;
        case 'M':
            return 1000;
        default:
            return 0;
    }
} }
scavy
  • 1
  • 1
  • after compiling when "Enter a Roman No. " message comes , Enter for example : M+V and it will add it – scavy Nov 05 '13 at 15:33