While-Schleife läuft nicht durch

key

Mitglied
Hallo zusammen,

ich habe folgendes Problem:

Ich will einen Text-"Verschlüssler" schreiben (ausschließlich zum Üben). Der Benutzer wird aufgefordert. etwas in die Konsole einzugeben und nach jedem Buchstaben mit - zu trennen. Das Programm liest die Eingabe und splittet den String wieder in einzelne Buchstaben.

Ich wollte das String[] splitted = code.split("-"); realisieren und dabei die einzelnen Buchstaben auf einen String schreiben -> String buchstabe = splitted[0];

Da ich ja jetzt für jeden Buchstaben einen String schreiben und für jeden String den if.Equals schreiben müsste, wäre das mehr Programmcode als nötig (denke ich :D).

Nun dachte ich, ich schreibe in die main void einen Int a = 0; und lasse den am Ende der While-Schleife mit a++ immer um 1 addieren, um den nächsten Split aus Code auf den String buchstabe zu schreiben.

Nun mein Problem: die Schleife wird leider nur 1 Mal ausgeführt, was nach der Schleife passiert wird überhaupt nicht ausgeführt (System.out....). Was habe ich übersehen? Danke :D

Java:
	public static void main(String[] args)
	throws IOException
	{
		
		
		Writer schreib = null;
		
		schreib = new FileWriter( "xxx.txt", true); 
		
		int a = 0;
		

		System.out.println("Buchstaben eingeben, buchstabenweise getrennt mit -");
	

		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
	
		
		String kompleing = null;
		
	
		while ((kompleing = ein.readLine()) != null) {

			String[] splitted = kompleing.split("-");
			
			String buchstabe = splitted[a];
	
			
			if(buchstabe.equals("a"))
			{
				try 
					{
						schreib.write("aAaAa-"); 
						schreib.close();
					}
			
			
				catch ( IOException e )
					{ 
						System.err.println( "Konnte Zeile nicht schreiben..." ); 
					} 
			}
				
			
			
			else if(buchstabe.equals("b"))
			{
				try 
					{
						schreib.write("bBbBb-"); 
						schreib.close();
					}
				
				
				catch ( IOException e )
					{ 
						System.err.println( "Konnte Zeile nicht schreiben..." ); 
					} 
			}
			
			a++;	
		
			
		}
		
		
		System.out.println("Datei wurde erstellt");
			
	}
 

njans

Top Contributor
Java:
    schreib.close();
Das schließst dir deinen Writer und danach kannst du diesen nicht mehr verwenden. Das close gehört hinter die while schleife.

Nebenbei: Strings haben auch die charAt(index i) Methode, damit bekommst du den Buchstaben an stelle i. Dann brauchst du bei der Eingabe auch nicht mit - arbeiten, sondern kannst den String direkt einlesen.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> die Schleife wird leider nur 1 Mal ausgeführt, was nach der Schleife passiert wird überhaupt nicht ausgeführt (System.out....).
was genau stellst du denn als Verhalten fest?
wenn man einmal eine Zeile eintippt und Enter tippt, dann wartet das Programm auf die nächste Zeile,
die Schleife ist noch nicht beendet, kann dieser Normalzustand das sein was du als was auch immer bezeichnest?

wie sollte das Programm deinen Wünschen nach nach dem Enter reagieren?
evtl. dazu wichtig: wie willst du mehrere Zeilen eintippen, wozu die Schleife?
auf welche Weise soll die Schleife je beendet werden, das danach drankommen?
 

key

Mitglied
Danke für die Antwort

Grundsätzlich ist das richtig aaaaber..
...das habe ich schon probiert, wenn ich es nach der Schleife schreibe, schreibt er garnichts. Das heißt also, er führt die Schleife 1 Mal aus (wie bei While so typisch ;), macht aber dann weder mit der Schleife noch mit dem restlichen Code weiter... Ich gehe davon aus, dass es ein Problem in der Bedingung gibt.

Hast die vielleicht eine Alternative, die die länge des kompleing(Komplette Eingabe)-Strings in einen Int-Wert schreibt?
 

njans

Top Contributor
Versuch es mal mit einer do-while schleife:
Java:
do{
...
}while(Bedingung)
Wenn du eine normale While schleife nimmst, dann müsstest du dafür sorgen, dass kompleing != null ist ;)
Kannst du natürlich auch machen.

Die Länge eines Strings fragt man mit .length ab ;)
 
G

Gast2

Gast
Du ließt einen kompletten String ein, verarbeitest dann in der Schleife aber nur das erste Zeichen. Wenn du nur einen String verschlüsseln willst solltest du die while Schleife vergessen und folgendes machen:
1. String einlesen
2. String splitten und String[] Array erstellen
3. for Schleife von 0 bis Arraylänge
3.1 Buchstabe s verschlüsseln
 

key

Mitglied
> die Schleife wird leider nur 1 Mal ausgeführt, was nach der Schleife passiert wird überhaupt nicht ausgeführt (System.out....).
was genau stellst du denn als Verhalten fest?
wenn man einmal eine Zeile eintippt und Enter tippt, dann wartet das Programm auf die nächste Zeile,
die Schleife ist noch nicht beendet, kann dieser Normalzustand das sein was du als was auch immer bezeichnest?

wie sollte das Programm deinen Wünschen nach nach dem Enter reagieren?
evtl. dazu wichtig: wie willst du mehrere Zeilen eintippen, wozu die Schleife?
auf welche Weise soll die Schleife je beendet werden, das danach drankommen?

Mit Enter soll die Schleife anfangen den String zu splitten (durch -, das eingegeben werden muss), ihn mit jeder Ausführung dem String (Buchstabe) einen neuen Teil vom Split zutragen. Die Schleife soll enden, wenn alle Buchstaben verarbeitet wurden.
 

Crian

Top Contributor
Das mit dem - solltest du lassen, siehe oben.

Deine While-Schleife liest bei jedem Durchgang einen String ein. Statt einen Buchstaben deiner Eingabe zu verarbeiten. Auch dies siehe oben.
 

njans

Top Contributor
Du suchst wohl eher sowas ;)
Java:
public static void main(String[] args)
	{
		try
		{
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter writer = new BufferedWriter(new FileWriter("xxx.txt"));
			String input = null;
			
			do
			{
				System.out.println("Bitte Buchstaben eingeben und mit Enter bestätigen.");
				input = reader.readLine();
				
				for (char c : input.toCharArray())
				{
					switch (c)
					{
						case 'c': writer.append("lulz ");  break;
					}
				}
			}
			while(!"".equals(input));
			
			writer.close();
			System.out.println("Programm beendet");
		}
		catch (IOException exception)
		{
			exception.printStackTrace();
		}
	}
 

key

Mitglied
Also ich habe das Projekt ein wenig umgebastelt, es funktioniert nun einwandfrei.

Das mit dem Splitten in der Schleife war ziemlich dumm - danke!

Ich splitte den String nun vor der Schleife (bin bei While geblieben;). NACH! dem splitten frage ich die Länge des Arrays ab und lasse die Schleife bis > 0 laufen.


Vielen Dank für die ganzen Tipps!

P.S: hier noch der funktionierende Code :)

Java:
	public static void main(String[] args)
	throws IOException
	{
		
		
		Writer schreib = null;
		
		schreib = new FileWriter( "xxx.txt", true); 
		
		int a = -1;
		
		

		System.out.println("Buchstaben eingeben, buchstabenweise getrennt mit -");

		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
	
		
		
		String kompleing = null;
		
		kompleing = ein.readLine();
		
		
		
		String[] splitted = kompleing.split("-");
		
		int lange = Array.getLength(splitted);
		
		
		
		while (lange > 0)
		 {
			
			a++;
			
			lange--;
			
			String buchstabe = splitted[a];
	
			
			if(buchstabe.equals("a"))
			{
				try 
					{
						schreib.write("aAaAa-");
					}
			
			
				catch ( IOException e )
					{ 
						System.err.println( "Konnte Zeile nicht schreiben..." ); 
					} 
			}
				
			
			
			else if(buchstabe.equals("b"))
			{
				try 
					{
						schreib.write("bBbBb-");
					}
				
				
				catch ( IOException e )
					{ 
						System.err.println( "Konnte Zeile nicht schreiben..." ); 
					} 
			}
			
			
			
		}
		
		schreib.close();
		System.out.println("Datei wurde erstellt");
			
	}
 

AquaBall

Top Contributor
Die Schleife ist ziemlich umständlich konstruiert.
Das Identische kannst du auch so erreichen:
Java:
public static void main(String[] args)
    throws IOException
    {
        Writer schreib = new FileWriter( "xxx.txt", true); 
        
        System.out.println("Buchstaben eingeben, buchstabenweise getrennt mit -");
        BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
        
        String kompleing = ein.readLine();

        for (String buchstabe:kompleing.split("-"))  {
            if(buchstabe.equals("a"))
            {
                try {
                        schreib.write("aAaAa-");
                } catch ( IOException e ) { 
                        System.err.println( "Konnte Zeile nicht schreiben..." ); 
                } 
            }
            else if(buchstabe.equals("b"))
            {
                try {
                        schreib.write("bBbBb-");
                } catch ( IOException e ) { 
                        System.err.println( "Konnte Zeile nicht schreiben..." ); 
                } 
            }
        }
        
        schreib.close();
        System.out.println("Datei wurde erstellt");
            
    }

Und dann bleiben noch die Fragen:
Warum mit '-' trennen?
Was, wenn der Benutzer nicht trennt?
Aus den obigen Tipps kannst du viel lernen. Nimm sie dir zu Herzen!

Vorschlag:
Java:
public static void main(String[] args)
    throws IOException
    {
        Writer schreib = new FileWriter( "xxx.txt", true); 
        
        System.out.println("Beliebigen Texte eingeben:");
        Scanner scan = new Scanner(System.in);
        String komplEing = scan.nextLine();

        for (char buchstabe:komplEing.toCharArray)  {
            for (int teste=0;teste<26;teste++) {  //=a-z; oder nur <2 wenn du nur a-b willst
                char kZeichen=(char)('a'+teste);
                if( buchstabe==kZeichen) {
                    try {
                           char gZeichen=(char)('A'+teste);
                           schreib.write(""+ kZeichen+gZeichen+kZeichen+gZeichen+kZeichen+"-");
                    } catch ( IOException e ) { 
                           System.err.println( "Konnte Zeile nicht schreiben..." ); 
                    } 
                }
            }
        }
        schreib.close();
        System.out.println("Datei wurde erstellt");
    }
Wenn du's auch nicht verwendest, so lies es dir doch durch, und denke mit, was in der jeweiligen Zeile passiert.
 

key

Mitglied
Die Schleife ist ziemlich umständlich konstruiert.
Das Identische kannst du auch so erreichen:
Java:
......
        for (String buchstabe:kompleing.split("-"))  {
            if(buchstabe.equals("a"))
            {
                try {
                        schreib.write("aAaAa-");
                } catch ( IOException e ) { 
                        System.err.println( "Konnte Zeile nicht schreiben..." ); 
                } 
            }
            else if(buchstabe.equals("b"))
  ......
    }

Die Schleife fragt dann auch Buchstabe für Buchstabe ab?

Weil ich noch String buchstabe = splitted[a]; a++; benutze, um mit jeder Schleife den Int-Wert um 1 erhöhe und somit mit jeder Schleife einen weiteren Buchstabe in die txt-Datei hinzufüge.

Die Schleife ist ziemlich umständlich konstruiert.
Das Identische kannst du auch so erreichen:
Warum mit '-' trennen?
Was, wenn der Benutzer nicht trennt?
Aus den obigen Tipps kannst du viel lernen. Nimm sie dir zu Herzen!

Danke für den/die Tipp(s), ich setze mich das nächste mal ran und versuche, den Stirng buchstabenweise zu teilen ohne vom Benutzer ein "-" für die Trennung zu fordern.
 

AquaBall

Top Contributor
Java:
for (String buchstabe:kompleing.split("-"))
Die Schleife fragt dann auch Buchstabe für Buchstabe ab?

Weil ich noch String buchstabe = splitted[a]; a++; benutze, um mit jeder Schleife den Int-Wert um 1 erhöhe und somit mit jeder Schleife einen weiteren Buchstabe in die txt-Datei hinzufüge.

Ja, die forEach-Schleife ist eine elegante, verkürzte Form, die ohne Hilfsvariable auskommt.

Code:
for (String buchstabe:kompleing.split("-"))
bedeutet das selbe, wie:
Java:
  String buchstaben[]=kompleing.split("-");
  for (i=0;i<buchstaben.length();i++)  {
     buchstabe=buchstaben[i];

Wobei ich nochmal betonen möchte, dass deine Bezeichnung buchstabe trügerisch ist, weil es je nach Eingabe (z.B. ohne '-') eben gleich mehrere Buchstaben sein können!, also solltest du eher den Ausdruck
Code:
silbe
verwenden, und hoffen, dass jede Silbe nur aus 1 Buchstaben besteht!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
D Array mit while-schleife Java Basics - Anfänger-Themen 12
B do while Schleife Java Basics - Anfänger-Themen 3
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
M While Schleife? Java Basics - Anfänger-Themen 4
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
J for /while Schleife Java Basics - Anfänger-Themen 5
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
S Do-While-Schleife Java Basics - Anfänger-Themen 2
S While Schleife Java Basics - Anfänger-Themen 4
S Do-While Schleife Java Basics - Anfänger-Themen 6
L String in Do-While-Schleife Abbruchkriterium Java Basics - Anfänger-Themen 1
CptK Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
B Verschachtelung von For-Schleife in While Schleife Java Basics - Anfänger-Themen 14
G while schleife Java Basics - Anfänger-Themen 11
G while schleife mit array Java Basics - Anfänger-Themen 12
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
G While schleife Java Basics - Anfänger-Themen 2
mor16Euro Erste Schritte Wie nennt man eine While oder For schleife die nie Ausgeführt wird Java Basics - Anfänger-Themen 5
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
N while Schleife wird nicht beendet, obwohl Sie hätte breaken sollen Java Basics - Anfänger-Themen 4
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
A Erste Schritte while-Schleife Java Basics - Anfänger-Themen 38
X While Do schleife funtioniert nicht Java Basics - Anfänger-Themen 5
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
P a cannot be resolved bei einer do while Schleife Java Basics - Anfänger-Themen 1
J While Schleife Java Basics - Anfänger-Themen 19
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
R While-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 24
b1ck while-Schleife Java Basics - Anfänger-Themen 10
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
kilopack15 DoWhile-Schleife als While-Schleife darstellen Java Basics - Anfänger-Themen 9
A While-Schleife funktioniert nicht! Java Basics - Anfänger-Themen 33
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
E Alphabet mit einer while Schleife ausgeben Java Basics - Anfänger-Themen 3
T while schleife starten , beeneden und wieder Starten Java Basics - Anfänger-Themen 8
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
B Passwort prüfen bis eindeutig - while Schleife? Java Basics - Anfänger-Themen 11
$ Multiplikations-Rechner mit while Schleife Java Basics - Anfänger-Themen 8
T Variablen Var aus While-Schleife abfragen -.-' Java Basics - Anfänger-Themen 9
snipesss Schlüsselworte While Schleife Java Basics - Anfänger-Themen 3
snipesss While Schleife Java Basics - Anfänger-Themen 6
A Do-While Schleife; int vergleich Java Basics - Anfänger-Themen 2
K For Schleife in While Schleife umwandeln Java Basics - Anfänger-Themen 5
Ste3et_C0st Dynamische While/For Schleife Java Basics - Anfänger-Themen 7
A While und For Schleife Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur do while- und while-Schleife Java Basics - Anfänger-Themen 4
C Do-While Schleife (Fehler bei der Klammerung?) Java Basics - Anfänger-Themen 8
C while-Schleife wird zuoft durchgeführt Java Basics - Anfänger-Themen 2
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
F Programm bricht While Schleife nicht ab Java Basics - Anfänger-Themen 4
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
C Erste Schritte Warum ist die While Schleife so schnell? Java Basics - Anfänger-Themen 5
A was wird in der while schleife gemacht Java Basics - Anfänger-Themen 3
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
Z Logikfehler do-while Schleife Java Basics - Anfänger-Themen 4
E While-Schleife Java Basics - Anfänger-Themen 6
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
A Probleme mit While Schleife Java Basics - Anfänger-Themen 10
M Fibonacci-Folge mit while-Schleife Java Basics - Anfänger-Themen 4
B Summe aller Zahlen von 1 bis zu dieser Zahl (ohne while oder for schleife) Java Basics - Anfänger-Themen 4
LangUndBreit Erste Schritte 100% cpu auslastung (evtl unendliche while schleife?) Java Basics - Anfänger-Themen 1
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
T while Schleife Java Basics - Anfänger-Themen 22
N While Schleife Erklärung Bitte Java Basics - Anfänger-Themen 3
F Problem mit der While schleife und dem Scanner Java Basics - Anfänger-Themen 2
A do while Schleife wird 2 mal durchlaufen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben