Ich muss ein Programm in Java schreiben, in dem ein Benutzer eine römische Zahl eingibt und diese dann in eine normale Zahl umgewandelt wird. Hilfe?
Unten ein Programm zur Umwandlung von normalen Zahlen in römischen Zahlen + mein Ansatz zum Programm zur umgekehrten Umwandlung.
![Das Programm zur Umwandlung von normal zu römisch - (programmieren, Java)](https://images.gutefrage.net/media/fragen/bilder/ich-muss-ein-programm-in-java-schreiben-in-dem-ein-benutzer-eine-roemische-zahl-eingibt-und-diese-dann-in-eine-normale-zahl-umg-71107152/0_big.jpg?v=1496574609000)
![Mein Ansatz von römisch zu normal - (programmieren, Java)](https://images.gutefrage.net/media/fragen/bilder/ich-muss-ein-programm-in-java-schreiben-in-dem-ein-benutzer-eine-roemische-zahl-eingibt-und-diese-dann-in-eine-normale-zahl-umg-71107152/1_big.jpg?v=1496574609000)
4 Antworten
öööhhh was in Gottes namen.
das geht wohl etwas geschickter.
ein kleiner Algorithmus in einer scheide, wäre ein gescheiterer ansatz.
Für switch-case denke ich hierbei zuerst an dies:
switch(letter) {
case "I": lettervalue = 1; break;
case "V": lettervalue = 5; break;
case "X": lettervalue = 10; break;
case "L": lettervalue = 50; break;
case "C": lettervalue = 100; break;
case "D": lettervalue = 500; break;
case "M": lettervalue = 1000; break;
default: throw new ArgumentException(...); //sorry, das ist vermutlich mehr C# als Java
};
und dann je nach dem vorhergehenden Buchstaben den vorhergehenden Buchstaben abzuziehen oder zu addieren.
Oder erst mal den Wert jedes Buchstabens erst mal addieren und, falls der Wert des nächsten Buchstabens größer ist, zwei mal zu subtrahieren.
Aber die einzelnen Werte in je einer eigenen Schleife ... brrr.
Kann es ein, dass in beiden Programmen ignoriert wir, dass z.B.
IX = 9
ist und nicht gleich 11?
Oder sehe ich da was falsch?
Dann ignoriert mich.
Zu jeder Standardübung gibt es auch eine Standardlösung im Internet zu finden ... In diesem Fall z. B. bei
https://www.google.de/search?q=roman+to+decimal+vice+versa+implement&btnG=Suche
(oder bei https://www.google.de/search?q=roman+to+decimal+implement&btnG=Suche )
Alternative Lösung: du gehst an einen Computer, wo Excel (oder eine andere Tabellenkalkulation mit einer vergleichbaren Funktion) installiert ist, und verwendest die Funktion "RÖMISCH", um dir je Umwandlungsrichtung 3999 case-Anweisungen erzeugen zu lassen. Mehr sind es ja normalerweise nicht.
Zelle A20: 20
Zelle B20: =RÖMISCH(A20)
Zelle C20: =" case "&A20&": result="""&B20&"""; break;"
Zelle D20: =" case "&B20&": result="&A20&"; break;"
Diese Zellen entsprechend auf Zeilen 1 bis 3999 übertragen.
Dann einfach Spalte C bzw. Spalte D in einen switch-Block reinkopieren.
Dein Dozent wird dann eine "besondere" Meinung von deiner Lösung haben. Leg vorsichtshalber das Excel-Sheet dazu ...
Hier ist eigentlich eine gute Vorlage zu finden: https://stackoverflow.com/questions/12967896/converting-integers-to-roman-numerals-java
ich muss es aber mit switch-case lösen