Char (roemische Zahlen)

A

Asking

Gast
ich habe Problem. Wie kann man jede Buchstaben ablesen und jede Buchstaben in Zahlen umwandeln. Beispiel römische Zahlen in arabische Zahlen umwandeln:

Java:
       System.out.println("Geben Sie bitte Ihre roemische Zahl!");
            char s = StdIn.readChar();      
          switch(s) {
            case 'I': 
            	System.out.println("1"); break;

I => 1
II => 1

danke
 

ARadauer

Top Contributor
du ließt nur ein Zeichen... du musst in einer Schleife lesen bis nix mehr da ist...
und naja mit switch? so einfach ist das nicht...
 
A

Asking

Gast
ich habe noch ein Problem. Ich darf keine Bibliothekfunktionen benutzen. Aber habe ich doch verwenden.

Java:
public static int [] romtodec (String s) {
		
		int [] feldZahl = new int[s.length()];
	
		for(int i = 0; i < s.length(); i++) {
			switch(s.charAt(i)) {
			case 'I':
				feldZahl [i] = 1;
				break;
			case 'V':
				feldZahl [i] = 5;
				break;
			case 'X':
				feldZahl [i] = 10;
				break;
			case 'L':
				feldZahl [i] = 50;
				break;
			case 'C':
				feldZahl [i] = 100;
				break;
			case 'D':
				feldZahl [i] = 500;
				break;
			case 'M':
				feldZahl [i] = 1000;
				break;
			}
		}
		return feldZahl;
	}

Java:
switch(s.charAt(i))
Ich weiß nicht, was soll ich andere Weg programmieren. Ohne switch(s.charAt(i)). Danke
 
T

Trolllllll

Gast
Und ich denke switch und so darfst du verwenden, weil was sollte man denn bitte sonst nehmen, wenn nicht if? und switch ist ja quasie nur eine schöne Form des if bei mehreren Möglichkeiten.

Du sollst halt nicht eine Bibliothek verwenden mit so einer funktion alla intToRom ;-)

Wie ich schon sagte, ohne Java-Befehle, wird es schwer Java zu Programieren, aber wenn du nur einsen und nullen schreiben darfst, nicht HEX da das ja auch quasie eine Bibliothek ist, ist das echt kompliziert
 
A

Asking

Gast
Java:
[code=Java]public class Rom2Dec {

	public static void main(String[] args) {
      
            System.out.println("Geben Sie bitte Ihre roemische Zahl!");
            String s = StdIn.readString();
            //System.out.println("Your string was: " + s); 
            
            boolean control = roemischeBuchstaben(s);
            if (control == false)
            	System.out.println("Fehleingabe");
           
            int [] feldZahl = romtodec(s);
            
            int max = 3000;
            int dec = berechnungRom2Dec (feldZahl);
            if(dec <= max && 0 < dec) {
            	System.out.println(dec);
            } else { 
            	System.out.println("Programm muss im Wertebereich 1 bis 3000");
            }
	} // end of main
	
	public static boolean roemischeBuchstaben (String s) {
    	 boolean control = false;
    	 
    	 for(int i = 0; i < s.length(); i++) {
    		switch (s.charAt(i)) {
    		case 'I': 
    			 control = true;
    			 break;
    		case 'V':
    			control = true;
    			break;
    		case 'X':
    			control = true;
    			break;	
    		case 'L':
    			control = true;
    			break;
    		case 'C':
    			control = true;	
    		case 'D':
    			control = true;
    			break;
    		case 'M':
    			control = true;
    			break;
    		default: 
    			control = false;
    		}
    	 }
    	 return control;
    }
	
	public static int [] romtodec (String s) {
		
		int [] feldZahl = new int[s.length()];
	
		for(int i = 0; i < s.length(); i++) {
			switch(s.charAt(i)) {
			case 'I':
				feldZahl [i] = 1;
				break;
			case 'V':
				feldZahl [i] = 5;
				break;
			case 'X':
				feldZahl [i] = 10;
				break;
			case 'L':
				feldZahl [i] = 50;
				break;
			case 'C':
				feldZahl [i] = 100;
				break;
			case 'D':
				feldZahl [i] = 500;
				break;
			case 'M':
				feldZahl [i] = 1000;
				break;
			}
		}
		return feldZahl;
	}
	
	public static int berechnungRom2Dec (int [] feldZahl){ 
        int dec = 0; 
        int last = 0; 
        for (int i = feldZahl.length - 1; i >= 0; i--) { 
                if (feldZahl [i] >= last) { 
                        dec = dec + feldZahl [i]; 
                } else { 
                        dec = dec - feldZahl [i]; 
                } 
                last = feldZahl [i];           
        } 
        return dec; 
	}
} //end of class
[/code]
 
A

Asking

Gast
Sorry, ich vergesse die Kommentar zu schreiben. Ich habe Problem. IIII = 4, das ist falsch.
XXXXX => 50 auch falsch. Muss ich ein neue Methode schreiben oder? Danke, wenn ihr könntet.
 

discere

Mitglied
hallo,
Ich habe auch Problem.
"3. Es folgen nicht mehr als drei gleiche Zahlenzeichen nacheinander"
Ich finde keine Lösung. ???:L???:L???:L
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Ist das eine Aufgabe oder Feststellung?

Java:
public static void gleiche () throws Exception {
		String[] mehrereStrings = new String [] {"X","X","X","X"};
		int countGleiche = 1;
		String letztesElement = null;
		
		for (String einStringElement : mehrereStrings) {
			System.out.println("Verarbeite: " + einStringElement);
			if(einStringElement.equals(letztesElement)) {
				countGleiche++;
			} else {
				letztesElement = einStringElement;
				countGleiche = 1;
			}
			
			if(countGleiche > 3) {
				throw new Exception("Zuviele gleiche aufeinanderfolgende Zeichen");
			}
		}
	}
 

Neue Themen


Oben