aspose file tools*
The moose likes Beginning Java and the fly likes converting numbers to roman numerals Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "converting numbers to roman numerals" Watch "converting numbers to roman numerals" New topic
Author

converting numbers to roman numerals

gaine chung
Greenhorn

Joined: Sep 16, 2001
Posts: 6
Hello everyone!
I have just started an Intro to JAVA course and I already have an assignment due the 2nd class day. The assignment is to write a program that can convert an integer (from the user's input) to roman numerals. I'm having some problems with it because I don't know how to concatenate strings. I know I may be going at this all wrong, but I've only had about a week's time to figure this out. Here's what I have so far (in semi-pseudocode form):
(M=1000, D=500, C=100, L=50, X=10, V=5, I=1)

String inputNumber= User's input
romanNum= Roman Numeral string
int number= inputNum converted to integer
counterM, counterC, counterX= Counters
If (number>=1000) //I'm thinking I may not need "If" statements
While (number >= 1000)
number -= 1000
counterM += 1
If (counterM >= 1)
While (counterM >= 1)
romanNum += "M"
counterM -= 1
If (number >= 900)
number -= 900
romanNum += "CM"
If (number >= 500)
number -= 500
romanNum += "D"
etc, etc...
As I stated earlier, I can't get the "M" to concatenate with the "CM", "D", etc. Can somebody please help. Thanks.
Nathan Pruett
Bartender

Joined: Oct 18, 2000
Posts: 4121

It looks like you are doing String concatenation correctly... += works fine with Strings... are you perhaps not initializing your romanNum value? romanNum = ""; will start you out with an empty String that you can add to...

If this doesn't help you out any, could you give more information on what exactly is happening?

-Nate


-Nate
Write once, run anywhere, because there's nowhere to hide! - /. A.C.
Michael Fitzmaurice
Ranch Hand

Joined: Aug 22, 2001
Posts: 168
The way you are concatenating the characters into the String seems to be fine. The following approach is based on the way you had started to do it. It seems to work okay, although I haven't tested it extensively...
<code>
<pre>
public class RomanNumeralConverter
{
private static final char ONE_THOUSAND = 'M';
private static final char FIVE_HUNDRED = 'D';
private static final char ONE_HUNDRED = 'C';
private static final char FIFTY = 'L';
private static final char TEN = 'X';
private static final char FIVE = 'V';
private static final char ONE = 'I';

public static void main(String[] args)
{
int intValue = Integer.parseInt(args[0]);
int remainder = intValue;
String numeralValue = "";

while(remainder >= 1000)
{
numeralValue += ONE_THOUSAND;
remainder -= 1000;
}

while(remainder >= 500)
{
if(remainder >= 900 )
{
numeralValue += ONE_HUNDRED;
numeralValue += ONE_THOUSAND;
remainder -= 900;
break;
}
numeralValue += FIVE_HUNDRED;
remainder -= 500;
}

while(remainder >= 100)
{
if(remainder >= 400 )
{
numeralValue += ONE_HUNDRED;
numeralValue += FIVE_HUNDRED;
remainder -= 400;
break;
}
numeralValue += ONE_HUNDRED;
remainder -= 100;
}

while(remainder >= 50)
{
if(remainder >= 90 )
{
numeralValue += TEN;
numeralValue += ONE_HUNDRED;
remainder -= 90;
break;
}
numeralValue += FIFTY;
remainder -= 50;
}

while(remainder >= 10)
{
if(remainder >= 40)
{
numeralValue += TEN;
numeralValue += FIFTY;
remainder -= 40;
break;
}
numeralValue += TEN;
remainder -= 10;
}

while(remainder >= 5)
{
if(remainder >= 9)
{
numeralValue += ONE;
numeralValue += TEN;
remainder -= 9;
break;
}
numeralValue += FIVE;
remainder -= 5;
}

while(remainder >= 1)
{
if(remainder >= 4)
{
numeralValue += ONE;
numeralValue += FIVE;
break;
}
numeralValue += ONE;
remainder -= 1;
}

System.out.println(intValue + " IN ROMAN NUMERALS: " + numeralValue);
}
}
</pre>
</code>
Hope this helps
Michael
------------------
"One good thing about music - when it hits, you feel no pain"
Bob Marley
[This message has been edited by Michael Fitzmaurice (edited September 17, 2001).]
[This message has been edited by Michael Fitzmaurice (edited September 17, 2001).]


"One good thing about music - when it hits, you feel no pain" <P>Bob Marley
gaine chung
Greenhorn

Joined: Sep 16, 2001
Posts: 6
Thanks for the help guys!
Nathan: As it turns out, I failed to initialize my string value: romanNum. I thought initializing was only for numbers. Silly me.
Michael: That's a very interesting approach. Too bad I'm not experienced enough to go about it your way. In due time...
Well, here's my final approach (for anyone who's interested). Again, thanks for the help.
_________________________________
import javax.swing.JOptionPane;
public class ConvertYear {
public static void main(String args[]) {
int year,
showYear;
String strYear,
romanNum;
romanNum = "";
strYear = JOptionPane.showInputDialog("Please type in a year");
year = Integer.parseInt(strYear);
showYear = year;
while (year >= 1000) {
year -= 1000;
romanNum += "M";
}
if (year >= 900) {
year -= 900;
romanNum += "CM";
}
if (year >= 500) {
year -= 500;
romanNum += "D";
}
if (year >= 400) {
year -= 400;
romanNum += "CD";
}
while (year >= 100) {
year -= 100;
romanNum += "C";
}
if (year >= 90) {
year -= 90;
romanNum += "XC";
}
if (year >= 50) {
year -= 50;
romanNum += "L";
}
if (year >= 40) {
year -= 40;
romanNum += "XL";
}
while (year >= 10) {
year -= 10;
romanNum += "X";
}
if (year == 9) {
year -= 9;
romanNum += "IX";
}
if (year >= 5) {
year -= 5;
romanNum += "V";
}
if (year == 4) {
year -= 4;
romanNum += "IV";
}
while (year >= 1) {
year -=1;
romanNum += "I";
}
JOptionPane.showMessageDialog(null, "The Roman Numeral equivalent of " + showYear + " is " + romanNum);
System.exit(0);
}
}
gaine chung
Greenhorn

Joined: Sep 16, 2001
Posts: 6
PS: How do you post code that's formatted? I can't seem to indent any of my lines.
Paul Stevens
Ranch Hand

Joined: May 17, 2001
Posts: 2823
Read on: Code tag
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: converting numbers to roman numerals