我在计算机科学课程的编程工作中遇到了麻烦。该计划是添加罗马数字。我不知道如何开始实际添加罗马数字的代码并输出两个数字的总和:这是我到目前为止主程序的代码:
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();
//}
}
}
答案 0 :(得分:5)
首先写两个方法
当用户提供罗马数字输入时,将它们转换为常规数字执行算术运算,最后将结果转换为罗马数字
同时检查Converting Roman Numerals To Decimal和Convert Int to Roman Numeral
答案 1 :(得分:0)
创建一个罗马数字类,它将转换您给出十进制数的数字,反之亦然。如果你愿意,你甚至可以让它静止。
这将使您的代码看起来更好,更面向对象。
这里有一个算法解释。
答案 2 :(得分: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;
}
} }