# Buchstaben invertieren durch for-Schleife



## babaganusch (27. Okt 2014)

Servus Leute,

ich hab in der Uni eine Aufgabe bekommen wegen der ich mir seit ca. 2 Tagen den Kopf zerbreche.
Das Problem ist wie folgt:
Erstellen Sie ein Programm, welches eine Textzeile einliest und alle darin enthaltenen Kleinin
die entsprechenden Großbuchstaben umwandelt und umgekehrt
Dies soll alles mit Hilfe der for-schleife gemacht werden und am besten mit den 2 angelegten strings ( lowercase = "abcdefghijklmnopqrstuvwxyz" & uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ").Jedoch bin ich total überfordert und versteh aktuell nichtmehr wo unten und wo oben ist.

Würde mich sehr über eure Hilfe bzw. Denkanstöße freuen!

Beste Grüße,
Fritz


----------



## Thallius (27. Okt 2014)

Es ist immer sinnvoll sich seine Aufgaben in einzelne Schritte aufzuteilen. Dann werden sie weit weniger komplex.

Schritt 1:

Du legst die beiden Strings an und dann nimmst du deinen Ausgangsstring und holst dir mit charAt() den entsprechenden Buchstaben an der Stelle deiner Schleife daraus. Nun hast du schon einmal alles Buchstaben einzeln.

Schritt 2:

Innerhalb der Schleife machst du dann folgendes mit dem Buchstaben:

Du suchst mit IndexOfString() in deinem ersten String nach diesem Buchstaben. Ist er nicht vorhanden, dann suchst du im zweiten String nach dem Buchstaben. 
Wenn Du nun z.B. den Buchstaben im ersten String an Position 6 findest, dann nimmst du aus den zweiten String den buchstaben an Position 6. Jetzt hast du den Buchstaben gewandelt. Wenn du den Buchstaben im zweiten String findest, dann must du den Buchstaben aus dem ersten String nehmen.

Findest du keinen Buchstaben, machst du einfach gar nichts. Dadurch werden die Leerzeichen einfach ignoriert.

Schritt 3:

Du ersetzt mit replace() den Buchstaben des Ausgangsstrings mit dem gefundenen Buchstaben an der Stelle wo Du gerade mit Deiner Schleife bist.

Gruß

Claus

P.S. Jetzt bitte keine Kommentare ala mit lowerCase() etc geht das viel einfacher. Anscheinend soll er das ja von Hand machen.


----------



## chuxXo (27. Okt 2014)

Hallo Fritz,

Ich würde es so lösen:

Du lässt dir deine Eingabe in einen String einlesen.
Dann gehst du durch eine for-Schleife, die die Länge deines Strings hat und überprüfst jedes Zeichen auf Groß- und Kleinschreibung. Danach lässt du die Buchstaben je nach Fall ändern.

Ich hätte es wahrscheinlich so gelöst : (bin auch Einsteiger)


```
try {
				int a = Integer.parseInt(temp);
				newinput = newinput + a;
				} 
			
			catch (NumberFormatException ex) {	
				if (temp.toLowerCase() == temp){
					newinput = newinput + (temp.toUpperCase());
				}
				else if (temp.toUpperCase() == temp){
					newinput = newinput + (temp.toLowerCase());
				}
			}
```

Es macht mal was es soll. Wenn Zahlen in deiner Eingabe sind, werden diese ignoriert.
Ich weiß nur nicht, ob es so die feine Art ist, das ganze über try und catch zu verwirklichen.


----------



## babaganusch (27. Okt 2014)

Anhang anzeigen 7002

also ich soll um es genau zu nehmen, einen Text den ich eingebe genau verkehrt ausspucken nach dem erneuten bestätigen. die ganze sache soll mit charAt() ablaufen, jedoch komm ich noch nicht so recht damit klar.


----------



## chuxXo (27. Okt 2014)

Dann schaust dir meins nochmal an. Das macht genau was du willst 
Den kleinen Rest zu erweitern wirst du schaffen.


----------



## Joose (27. Okt 2014)

Das suchst du oder?

```
if(eingabe.charAt(i) == ...... ) {
....
```




chuxXo hat gesagt.:


> ```
> try {
> int a = Integer.parseInt(temp);
> newinput = newinput + a;
> ...



Diese try/catch ist überflüssig. Die Klasse Character bietet auf die Methode "isDigit()" an, so kann ich einfach überprüfen ob ich eine Zahl habe oder nicht.
-> Exceptions sollten nicht zur Programmsteuerung (wie in diesem Fall) verwendet werden! 
Außerdem sind Exceptions Performancelastig (was bei diesem Beispiel kein großes Problem sein wird aber bei komplexeren vielleicht schon)


----------



## chuxXo (27. Okt 2014)

Das meint er, wie es aussieht 

Ok, perfekt, Danke !

Dann wüsste ich jetzt, wie ich es machen würde 
Einfach das try n catch durch "if (String.isDigit)" ersetzen.
Dann müsste es ja auch funktionieren ?!


----------



## babaganusch (27. Okt 2014)

Servus, schonmal vielen Dank für eure Hilfe. Ich bin jetzt aktuell soweit, dass ich die eingabe einlese und nun mithilfe von if ( eingabe.charAt(i) == uppercase.length ) die Übereinstimmung überprüfe. Nun weiß ich aber nicht, wie ich dem Programm die Aufgabe gebe, aus dem kleinen "a" ein großes "A" zu machen.


----------



## Joose (27. Okt 2014)

babaganusch hat gesagt.:


> ..... if ( eingabe.charAt(i) == uppercase.length ) die Übereinstimmung überprüfe.



Nein  .... eingabe.charAt(i) gibt dir den Character an Position i im String eingabe zurück.
uppercase.length gibt dir Länge des Arrays uppercase zurück. 
--> Dieser Vergleich überprüft nicht das von dir gewünschte.

Es ist immer von Vorteil wenn du deinen aktuellen Code postest wenn du eine weitere Frage hast.
So können wir mit deinem Code als Grundlage dir zeigen/sagen wo das Problem ist bzw. wie man es lösen könnte.

In dem einem Anhang hast du ja schon ein Bild mit Code gepostet (besser den Code immer hier posten in Java-Tags, so können Helfer diesen einfach per Copy&Paste verwenden und müssen nicht mühsam abtippen).
Dort hast du 2 verschachtelte for-Schleifen

Schleife 1: geht deine Eingabe Zeichen für zeichen durch
Schleife 2: geht dein uppercase Array zeichen für zeichen durch
In der 2.Schleife musst du eben prüfen ob das aktuelle zeichen der eingabe mit dem aktuellen des uppercase arrays übereinstimmt
wenn ja -> dann hast du mit "j" schon die position die du brauchst um aus dem lowercase array das richtige zeichen zu holen


----------



## chuxXo (27. Okt 2014)

Wenn du deine Eingabe in einem String hast, hast du schonmal ne gute Grundlage.

nehmen wir an:
String input = "AbCdEf";
ist dein eingegebenes. Jetzt willst du in eine for-Schleife.
Mit "input.lentgh()" bekommst du schon mal die Anzahl der eingegebenen Zeichen. (In diesem Fall 6)

Jetzt weiß du ja, wie oft du durch die Schleife musst 
Den Rest kannst dir jetzt aus diesem Thread zusammensuchen


----------



## babaganusch (27. Okt 2014)

public static void main(String[] args) {

            String lowercase = "qwertzuiopasdfghjklyxcvbnm";
            String uppercase = "QWERTZUIOPASDFGHJKLYXCVBNM";


            System.out.println ( "Bitte etwas eingeben : " ) ;
            String eingabe = ( new java.util.Scanner ( System.in ) ).nextLine () ;

            for ( int i = 0 ; i < eingabe.length(); i++) {
                for (int j = 0 ; j < lowercase.length(); j++);    

                        if (eingabe.charAt(i) == uppercase.length()); {


                           else (eingabe.charAt(i) == lowercase.length());

soweit bin ich jetzt aktuell..ich hab java erst seit 2 Wochen und ich bin noch ziemlich unsicher auf der Bereich  
mein Hauptproblem ist wie ich jetzt quasi sage, dass wenn das Programm den Buchstaben im Uppercase gefunden hat ihn im lowercase sucht und ihn ersetzt.


----------



## stg (27. Okt 2014)

Schau dir doch einfach mal die Klasse Character an.

Diese besitzt u.A. die Methode #isLowerCase() und #isUpperCase() und auch toLowerCase() bzw toUpperCase()


----------

