Buchstaben invertieren durch for-Schleife

babaganusch

Mitglied
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
 
Zuletzt bearbeitet:

Thallius

Top Contributor
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

Bekanntes Mitglied
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)

Java:
			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.
 
Zuletzt bearbeitet:

chuxXo

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

Joose

Top Contributor
Das suchst du oder?
Java:
if(eingabe.charAt(i) == ...... ) {
....


Java:
			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());
				}
			}

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)
 
Zuletzt bearbeitet:

chuxXo

Bekanntes Mitglied
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 ?!
 
Zuletzt bearbeitet:

babaganusch

Mitglied
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

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

Bekanntes Mitglied
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 :)
 
Zuletzt bearbeitet:

babaganusch

Mitglied
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 :D
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.
 

Neue Themen


Oben