Eingabe auf Richtigkeit und Reihenfolg überprüfen

stehlo

Mitglied
hallo, ich habe ein Programm geschrieben, wo ich römische Buchstaben eingebe und mir anschließend die Zahl dafür ausgegeben wird. In der main Methode wird nur ein String eingelesen und anschließend mit der Methode Roemer berchnet.

Das funktioniert auch, aber ich muss folgendes dazumachen:
"Weiters soll mit Hilfe einer Klassenmethode namens validate sicher gestellt werden, dass es sich um eine gültige römische Zahl handelt. Diese Methode übernimmt eine römische Zahl als String und überprüft, ob es sich um eine gültige römische Zahl hat (die richtigen Zeichen in der richtigen Reihenfolge). Wenn der übergebene String eine gültige römische Zahl ist, gib true zurück, sonst false."

leider weiß ich nicht wie ich (vor allem die richtige Reihenfolge) das überprüfen kann.
Ich hoffe mir kann jemand einen Lösungsvorschlag nennen.

Hier noch meine Programmcodes:
Code:
public class Roemer
{
    public static int roemerUmgekehrt(String Romzahl){
        int ergebnis=0;
        char aktuellesZeichen;
        String romzahl=Romzahl.toLowerCase(); //Alles in klein Umwandeln, um auch klein eingegebene Röm. Zahlen zu brücksichtigen
        for(int zaehler=0;zaehler<romzahl.length();zaehler++){
            aktuellesZeichen= romzahl.charAt(zaehler);
            switch(aktuellesZeichen){
                case 'm':
                ergebnis+=1000;
                break;

                case 'd':
                ergebnis+=500;
                break;

                case 'c':
                if (romzahl.charAt(zaehler+1)=='m'){//Wenn nach dem C ein M stht: CM=900
                    ergebnis+=900;
                    zaehler++; //Um das m nicht doppelt zu rechnen
                    break;}
                else if(romzahl.charAt(zaehler+1)=='d'){
                    ergebnis+=400;
                    zaehler++;
                    break;}
                else{
                    ergebnis += 100;
                    break;}

                case 'l':
                ergebnis+=50;
                break;

                case 'x':
                if(romzahl.charAt(zaehler+1)=='c'){
                    ergebnis+=90;
                    zaehler++;
                    break;}
                else if(romzahl.charAt(zaehler+1)=='l'){
                    ergebnis+=40;
                    zaehler++;
                    break;}
                else{
                    ergebnis+=10;
                    break;}

                case 'v':
                ergebnis += 5;
                break;

                case 'i':
                if ((romzahl.length()>(zaehler+1) && romzahl.charAt(zaehler+1)=='x')){ //um zu verhindern dass zaehler>länge, da sonst Fehlermeldung
                    ergebnis+=9;
                    zaehler++;
                    break;}
                else if(romzahl.length()>(zaehler+1) && romzahl.charAt(zaehler+1)=='v'){
                    ergebnis+=4;
                    zaehler++;
                    break;}                   
                else{
                    ergebnis+=1;
                    break;}
            }
        }
        return ergebnis;
    }


und noch die main methode:
Code:
import javax.swing.JOptionPane;

public class EinAusgabe
{
    public static void main (String[] args){
        String eingabe = JOptionPane.showInputDialog(null,"Bitte geben Sie eine römische Zahl ein, welche umgewandelt werden soll.");
        int ergebnis=Roemer.roemerUmgekehrt(eingabe);
        JOptionPane.showMessageDialog(null,"Die römische Zahl " + eingabe + " ist gleich zu " + ergebnis);
    }
}

Vielen Dank!!!
 
Hallo, nachdem ich leider bisher keine Antwort erhalten habe möchte ich mein Anliegen nochmals etwas besser darstellen:
Ich muss bis morgen die Lösung abgeben und mir fehlt eben noch der oben beschriebene Fall.
Um das klarer zu gestalten stelle ich die gesamte Aufgabenstellung online, meinen geschriebenen Programmcode seht ihr oben.

Hier bei dem war mir alles klar, die weiterführende aufgabe (siehe unten) muss ergänzt werden
Die Aufgabe: Wie war das bei den Römern? soll nun in umgekehrter Richtung funktionieren. Schreibe dazu in die Klasse Roemer eine Methode namens roemerUmgekehrt. Diese Methode soll einen String als Parameter übernehmen. Dieser String soll eine römische Zahl enthalten, die wieder in eine normale ganze Zahl umgewandelt werden soll. Die umgewandelte Zahl soll zurück gegeben werden.

Für die Umwandlung gilt:



  • M entspricht 1000.
  • D entspricht 500.
  • C entspricht 100
  • L entspricht 50.
  • X entspricht 10.
  • V entspricht 5.
  • I entspricht 1.
Schreibe dann eine weitere Klasse, die eine main-Methode enthält. Diese main-Methode soll mit Hilfe von JOptionPane eine römische Zahl vom Benutzer erfragen, und die entsprechende ganze Zahl mit Hilfe der Methode roemerUmgekehrt ermitteln und ausgeben.

Beispiel:
Der Benutzer gibt die Zahl CCLXXVIIII ein:

  • CC kommt 2x vor => 200
  • danach kommt L 1x vor => 50 insgesamt 250
  • danach kommt X 2x vor => 20 insgesamt 270
  • danach kommt V 1x vor => 5 insgesamt 275
  • danach kommt I 4x vor => 4 insgesamt 279
Das Ergebnis ist daher 279

Achte besonders auf:


  • Die Auswahl, welche römische Ziffer welchem Wert entspricht soll durch eine switch-case-Anweisung erfolgen
  • Es sind 2 Klassen zu schreiben und abzugeben.
  • Dokumentationskommentar für jede Klasse und Methode (außer main)
  • Einrückungen


Bei dieser Aufgabenstellung habe ich Probleme mit dem Fett markierten Teil:
Ändere Wie war das bei den Römern - Umkehrung so um, dass die richtige römische Schreibweise in eine Zahl umgewandelt wird. Dabei müssen zusätzlich noch folgende Punkte berücksichtigt werden:

  • CM entspricht 900.
  • CD entspricht 400.
  • XC entspricht 90
  • XL entspricht 40.
  • IX entspricht 9.
  • IV entspricht 4.
Achtung: Werte > 3999 oder kleiner 1 können (derzeit) nicht sinnvoll umgewandelt werden

Weiters soll mit Hilfe einer Klassenmethode namens validate sicher gestellt werden, dass es sich um eine gültige römische Zahl handelt. Diese Methode übernimmt eine römische Zahl als String und überprüft, ob es sich um eine gültige römische Zahl hat (die richtigen Zeichen in der richtigen Reihenfolge). Wenn der übergebene String eine gültige römische Zahl ist, gib true zurück, sonst false.

Ändere deine Ein-Ausgabe-Klasse entsprechend, so dass die Umwandlung nur dann erfolgt, wenn die Eingabe überhaupt eine gültige römische Zahl ist.

Achte besonders auf Folgendes:
  • Erstelle 2 Klassen, eine Klasse namens Umwandeln mit der Methode roemerUmgekehrt und der Methode validate und eine zweite Klasse mit der main-Methode
  • Dokumentationskommentare
  • Einrückungen
 
Du musst alle Zeichenabfolgen überprüfen die auf einen Zahl kommt. Das machen Parser übrigens auch so.

Oder einfach Regex verwenden (hab gesehn die gibt es auch schon für römische Ziffern).
 

Neue Themen


Zurück
Oben