Die Umwandlung von Römisch -> Dezimal wurde erweitert
parent
faa8e897c0
commit
974f0e38ff
|
@ -4,47 +4,99 @@ import java.util.Scanner;
|
|||
|
||||
/**
|
||||
* @author Hanin Aljalab
|
||||
* Anmerkung: in dieser Version findet nur die Umwandlung von
|
||||
* Dezimal zu Römisch statt.
|
||||
* Daher muss die Umwandlung von Römisch zu Dezimal erweitert werden
|
||||
* Anmerkung: Diese Version unterstützt nun sowohl die Umwandlung
|
||||
* von Dezimal zu Römisch als auch von Römisch zu Dezimal.
|
||||
*/
|
||||
public class DecToRoem_Version_01 {
|
||||
public static void main(String[] args) {
|
||||
|
||||
int zahl, position = 0;
|
||||
|
||||
//Übersetzungstabellen für die Zahlenwerte
|
||||
// Übersetzungstabellen für die Zahlenwerte
|
||||
String[] roemisch = {"M", "CM", "D", "CD", "C", "XC", "L", "XL",
|
||||
"X", "IX", "V", "IV", "I"};
|
||||
|
||||
int[] arabisch = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
|
||||
|
||||
//"Verbindung" zur Tastatur
|
||||
Scanner input = new Scanner(System.in);
|
||||
String auswahl;
|
||||
|
||||
System.out.println("Konvertierung Dezimal -> Römisch");
|
||||
do {
|
||||
System.out.println("Wählen Sie die gewünschte Umwandlung:");
|
||||
System.out.println("1. Dezimal -> Römisch");
|
||||
System.out.println("2. Römisch -> Dezimal");
|
||||
System.out.print("Ihre Auswahl: ");
|
||||
int wahl = input.nextInt();
|
||||
input.nextLine(); // Puffer für die nächste Eingabe leeren
|
||||
|
||||
//Eingabe von x über die Tastatur einlesen
|
||||
System.out.println("Eingabe von x (1 <= x <= 3999): ");
|
||||
zahl = input.nextInt();
|
||||
if (wahl == 1) {
|
||||
// Umwandlung von Dezimal nach Römisch
|
||||
System.out.println("Konvertierung Dezimal -> Römisch");
|
||||
System.out.print("Eingabe von x (1 <= x <= 3999): ");
|
||||
int zahl = input.nextInt();
|
||||
input.nextLine(); // Puffer für die nächste Eingabe leeren
|
||||
|
||||
//Umwandlung
|
||||
//Fehleingaben abfragen
|
||||
if (zahl < 1 || zahl > 3999) {
|
||||
System.out.println("Eingabe liegt außerhalb des zulässigen Bereichs!");
|
||||
} else {
|
||||
System.out.println("Ausgabe: ");
|
||||
// Die arabischen Zahlenwert-Entsprechungen von oben nach unten arbeiten
|
||||
while (zahl > 0 && position < arabisch.length) {
|
||||
if (zahl >= arabisch[position]) { // Anpassung der Bedingung
|
||||
zahl -= arabisch[position];
|
||||
System.out.print(roemisch[position]); // Ausgabe in einer Zeile
|
||||
// Fehleingaben abfragen
|
||||
if (zahl < 1 || zahl > 3999) {
|
||||
System.out.println("Eingabe liegt außerhalb des zulässigen Bereichs!");
|
||||
} else {
|
||||
position++;
|
||||
System.out.print("Römische Zahl: ");
|
||||
int position = 0;
|
||||
while (zahl > 0 && position < arabisch.length) {
|
||||
if (zahl >= arabisch[position]) {
|
||||
zahl -= arabisch[position];
|
||||
System.out.print(roemisch[position]);
|
||||
} else {
|
||||
position++;
|
||||
}
|
||||
}
|
||||
System.out.println(); // Neue Zeile nach der Ausgabe
|
||||
}
|
||||
|
||||
} else if (wahl == 2) {
|
||||
// Umwandlung von Römisch nach Dezimal
|
||||
System.out.println("Konvertierung Römisch -> Dezimal");
|
||||
System.out.print("Eingabe einer römischen Zahl (I bis MMMCMXCIX): ");
|
||||
String roemischeZahl = input.nextLine().toUpperCase();
|
||||
|
||||
int ergebnis = roemischZuDezimal(roemischeZahl, roemisch, arabisch);
|
||||
if (ergebnis != -1) {
|
||||
System.out.println("Dezimalzahl: " + ergebnis);
|
||||
} else {
|
||||
System.out.println("Ungültige römische Zahl!");
|
||||
}
|
||||
|
||||
} else {
|
||||
System.out.println("Ungültige Auswahl! Bitte wählen Sie 1 oder 2.");
|
||||
}
|
||||
System.out.println(); // Neue Zeile nach der Ausgabe
|
||||
}
|
||||
|
||||
// Nach jeder Umwandlung den Benutzer fragen, ob er fortfahren möchte
|
||||
System.out.print("Möchten Sie eine weitere Umrechnung durchführen? (ja/nein): ");
|
||||
auswahl = input.nextLine();
|
||||
|
||||
} while (auswahl.equalsIgnoreCase("ja")); // Fortsetzen, wenn "ja" eingegeben wird
|
||||
|
||||
System.out.println("Programm beendet.");
|
||||
input.close();
|
||||
}
|
||||
|
||||
// Methode zur Umwandlung von römischen Zahlen in Dezimalzahlen
|
||||
public static int roemischZuDezimal(String roemisch, String[] roemischTab, int[] arabischTab) {
|
||||
int zahl = 0;
|
||||
|
||||
for (int i = 0; i < roemisch.length(); i++) {
|
||||
boolean gefunden = false;
|
||||
for (int j = 0; j < roemischTab.length; j++) {
|
||||
// Überprüfen, ob ein passendes römisches Symbol vorhanden ist
|
||||
if (roemisch.startsWith(roemischTab[j], i)) {
|
||||
zahl += arabischTab[j];
|
||||
i += roemischTab[j].length() - 1; // i um die Länge des Symbols erhöhen
|
||||
gefunden = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!gefunden) {
|
||||
return -1; // Ungültige römische Zahl
|
||||
}
|
||||
}
|
||||
|
||||
return zahl;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue