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 ).
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
Java:
publicstaticvoidmain(String[] args)throwsIOException{Writer schreib =null;
schreib =newFileWriter("xxx.txt",true);int a =0;System.out.println("Buchstaben eingeben, buchstabenweise getrennt mit -");BufferedReader ein =newBufferedReader(newInputStreamReader(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...");}}elseif(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");}
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.
> 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?
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?
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
> 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.
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:
publicstaticvoidmain(String[] args)throwsIOException{Writer schreib =null;
schreib =newFileWriter("xxx.txt",true);int a =-1;System.out.println("Buchstaben eingeben, buchstabenweise getrennt mit -");BufferedReader ein =newBufferedReader(newInputStreamReader(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...");}}elseif(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");}
Die Schleife ist ziemlich umständlich konstruiert.
Das Identische kannst du auch so erreichen:
Java:
publicstaticvoidmain(String[] args)throwsIOException{Writer schreib =newFileWriter("xxx.txt",true);System.out.println("Buchstaben eingeben, buchstabenweise getrennt mit -");BufferedReader ein =newBufferedReader(newInputStreamReader(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...");}}elseif(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:
publicstaticvoidmain(String[] args)throwsIOException{Writer schreib =newFileWriter("xxx.txt",true);System.out.println("Beliebigen Texte eingeben:");Scanner scan =newScanner(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 willstchar 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.
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...");}}elseif(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.
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.
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!!