# Char (roemische Zahlen)



## Asking (5. Dez 2012)

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


```
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 (5. Dez 2012)

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...


----------



## Trolllllll (6. Dez 2012)

Such mal in der Forensuche, das gab es hier letztens schon mal ;-)


----------



## Asking (6. Dez 2012)

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


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


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


----------



## Trolllllll (6. Dez 2012)

Wie ich schon sagte, schau mal in der Forensuche http://www.java-forum.org/hausaufgaben/143200-roemische-zahlen.html

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 ;-)


----------



## Asking (6. Dez 2012)

ja, 


switch(s.charAt(i)) ist eine Bibliothenfunktion oder?? oder ich verwirrt?


----------



## Trolllllll (6. Dez 2012)

Trolllllll hat gesagt.:


> 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


----------



## Asking (7. Dez 2012)

```
[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]


----------



## Asking (8. Dez 2012)

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.


----------



## Marcinek (8. Dez 2012)

Hallo,

warum liest du nicht diesen Thread?

http://www.java-forum.org/hausaufgaben/143200-roemische-zahlen.html

Gruß,

Martin


----------



## discere (8. Dez 2012)

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


----------



## Marcinek (9. Dez 2012)

Ist das eine Aufgabe oder Feststellung?


```
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");
			}
		}
	}
```


----------

