Die Umwandlung von Römisch -> Dezimal wurde erweitert

main
Hanin Aljalab 2024-10-18 10:32:40 +02:00
parent faa8e897c0
commit 974f0e38ff
1 changed files with 78 additions and 26 deletions

View File

@ -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;
}
}