URL: https://www.overclockers.at/coding-stuff/solved_javaproblem_bei_eingabe_in_die_konsole_202004/page_1 - zur Vollversion wechseln!
Hey Ihrs!
ich bin relativ am verzweifeln, weil ich nicht verstehe, wieso Java da so nen Mist macht bzw was ich falsch mache.
Hier der Code
Code:package uebung07; import static gdi.MakeItSimple.*; public class Tests { /** * @param args */ public static void main(String[] args) { int int1=0, i=0; // Hier wird das erste Array erstellt println("Tippen sie bitte ein, was im ersten Array stehen soll!"); String eingabe1 = readLine(); println("Geben Sie bitte die Länge des ersten Arrays an!"); int1 = readInt(); while(eingabe1.length() > int1){ println("Das Array ist zu kurz für Ihre Eingabe, bitte geben sie " + "neue Werte ein."); println("Tippen sie bitte ein, was im ersten Array stehen soll!"); eingabe1 = readLine(); println("Geben Sie bitte die Länge des ersten Arrays an!"); int1 = readInt(); } char [] array1 = new char[int1]; while (i<eingabe1.length()){ array1 [i] = eingabe1.charAt(i); i++; } println(eingabe1); println(eingabe1.charAt(3)); i=0; while(i<array1.length){ print(array1[i]); i++; } } }
Code:Tippen sie bitte ein, was im ersten Array stehen soll! Hallo Geben Sie bitte die Länge des ersten Arrays an! 3 Das Array ist zu kurz für Ihre Eingabe, bitte geben sie neue Werte ein. Tippen sie bitte ein, was im ersten Array stehen soll! Geben Sie bitte die Länge des ersten Arrays an!
gib die werte einfach mal in der konsole aus bevor du sie vergleichst
gute Idee, ich werds mal machen.
edit:
Code:println("Tippen sie bitte ein, was im ersten Array stehen soll!"); String eingabe1 = readLine(); println(eingabe1); println("Geben Sie bitte die Länge des ersten Arrays an!"); int1 = readInt(); println(int1); while(eingabe1.length() > int1){ println("Das Array ist zu kurz für Ihre Eingabe, bitte geben sie " + "neue Werte ein."); println(eingabe1); println("Tippen sie bitte ein, was im ersten Array stehen soll!"); eingabe1 = readLine(); println(eingabe1); println(int1); println("Geben Sie bitte die Länge des ersten Arrays an!"); int1 = readInt(); println(int1);
Code:Tippen sie bitte ein, was im ersten Array stehen soll! Hallo Hallo Geben Sie bitte die Länge des ersten Arrays an! 6 6 Tippen sie bitte ein, was im zweiten Array stehen soll! Geben Sie bitte die Länge des zweiten Arrays an!
du hast nicht den wert im vergleich genommen, sondern den ganzen string. interessant ist nicht eingabe1, sondern eingabe1.length().
Zitat von DenneWieso überspringt er die zweite readLine() Eingabe !?
that, wird deine vermutung nicht durch die ausgabe widerlegt ?
Zitat von Nicodu hast nicht den wert im vergleich genommen, sondern den ganzen string. interessant ist nicht eingabe1, sondern eingabe1.length().
ich meine, gib eingabe1.length() aus zur kontrolle, nicht eingabe1.
ah okay, wird gemacht!
Und hier wieder das Ergebnis
Code:// Hier wird das erste Array erstellt println("Tippen sie bitte ein, was im ersten Array stehen soll!"); String eingabe1 = readLine(); println(eingabe1); println(eingabe1.length()); println("Geben Sie bitte die Länge des ersten Arrays an!"); int1 = readInt(); println(int1); while(eingabe1.length() > int1){ println("Das Array ist zu kurz für Ihre Eingabe, bitte geben sie " + "neue Werte ein."); println(eingabe1); println(eingabe1.length()); println("Tippen sie bitte ein, was im ersten Array stehen soll!"); eingabe1 = readLine(); println(eingabe1); println(eingabe1.length()); println(int1); println("Geben Sie bitte die Länge des ersten Arrays an!"); int1 = readInt(); println(int1); } char [] array1 = new char[int1]; while (i<eingabe1.length()){ array1 [i] = eingabe1.charAt(i); i++; }
Code:Tippen sie bitte ein, was im ersten Array stehen soll! Hallo Hallo 5 Geben Sie bitte die Länge des ersten Arrays an! 4 4 Das Array ist zu kurz für Ihre Eingabe, bitte geben sie neue Werte ein. Hallo 5 Tippen sie bitte ein, was im ersten Array stehen soll! 0 4 Geben Sie bitte die Länge des ersten Arrays an!
wenn du mir ganz kurz erklärst, was das programm genau bewirken soll, schreib ich dir schnell eine version, welche dasselbe bewirkt. ich vermute nämlich, dass das, was du da vorhast, sich auch wesentlich kürzer schreiben lassen würde.
hast du vor, einen string von der konsole einzulesen und diesen dann zu speichern? Brauchst du ihn in einem char-array? falls ja, dann lassen sich strings auch einfach in ein char-array konvertieren.
Zitat von DenneSchön und gut, aber ich müsste an der Stelle was eingeben können.
Er überspringt einfach die Eingabe und der neue String ist einfach leer.
Aber wieso ?
ok, ich hab mir jetzt mal die mühe gemacht, ein einfaches programm zu schreiben, das einen string einliest und diesen auf mehrere arten ausgibt. dabei verwendet die main-methode zwei static-methoden. immer schön alles in einzelne methoden schreiben (prinzip einer einzigen verantwortung). für den input habe ich einen Scanner verwendet, der recht einfach anzuwenden ist. hier der code:
Code:import java.util.Scanner; /** * * Testet eine einfache Möglichkeit, einen String per * Konsole über einen Scanner einzulesen. Dieser String * wird anschließend auf vier verschiedene Arten ausgegeben. * */ public class Tests { /** * Liest eine Zeile von der Konsole und speichert diese. * Dazu wird ein Scanner-Objekt erstellt mit dem InputStream * System.in. Anschließend wird dieser String zurückgegeben. * @return Der eingelesene String. */ public static String getInput() { Scanner scanner; // Scanner benötigt einen InputStream, in diesem Fall // eben die Konsole, also System.in scanner = new Scanner(System.in); System.out.print("Tippen sie bitte ein, was im ersten Array stehen soll: "); return scanner.nextLine(); } /** * Gibt den eingelesenen String auf vier verschiedene * Arten aus. * @param input Der auszugebende String. */ public static void printInformation(String input) { char [] inputCharacters; inputCharacters = input.toCharArray(); System.out.println("\nAusgabe: "); // Ausgabe des Strings System.out.println(input); // Ausgabe der Länge System.out.println("Länge: " + input.length()); // Ausgabe des char-arrays ebenfalls möglich, // da die toString()-Methode überschrieben ist. System.out.println(inputCharacters); // Ausgabe des char-arrays stückweise for (int i=0; i < input.length(); i++) { System.out.print(inputCharacters[i]); } System.out.println(); // Elegantere Version der for-Schleife (for each) for (char c: inputCharacters) { System.out.print(c); } System.out.println(); } public static void main(String[] args) { String input; input = getInput(); printInformation(input); } }
oha, dass diese funktionen nicht richtig laufen hab ich garnicht in betracht gezogen - sorry that
aja, zu dem oben erwähnten problem mit den read-methoden folgendes: ich glaube ebenfalls, wie that bereits erwähnt hat, dass das return-zeichen im string das problem ist. in c gibt es dieses problem ja auch mit der scanf()-funktion (vgl. dazu das openbook auf galileocomputing). das problem ist hierbei die pufferung.
eine möglichkeit, das problem zu lösen (sofern man wirklich scanf verwenden möchte) besteht darin, das newline-zeichen mit einer while-schleife aus dem puffer herauszuziehen.
nur mal so als vergleich...
@ that: ich dachte du meinst, ich hätte ausversehen 2 mal enter gedrückt oder ähnliches
und nico meinte ja irgendwie, dass deine "theorie" widerlegt wird duch die konsole.
ich hab hierfür einige testprogramme geschrieben, die nur teilstücke enthalten. die laufen alle ohne probleme, weil halt das readLine() nicht überlesen wird...
Ich komme ja nicht einmal soweit das ich gucken kann, ob der string vernünftig in das array kopiert wird (im testprogramm hat das aber problemlos geklappt).
@ Maekloev: Vielen Dank! Aber das Programm ist für die Hochschule und da dürfen wir nur Sachen verwenden, die wir bis dahin hatten :/ Deswegen schauts wohl auch so umständlich aus (bin noch im ersten Semester). Und um ehrlich zu sein hatten wir glaube ich nicht einmal charAt. Wie wir sonst die Aufgabe meistern sollen, ist mir ein Rätsel.
Zum Programm an sich:
Ich habe nur ein Ausschnitt gepostet.
Der Benutzer soll einen String eingeben, welches Zeichen für Zeichen in ein Char-Array kopiert wird. Hierbei darf der Benutzer aber bestimmen, wie lang das Array sein soll (deswegen die while-schleife die den fall abfängt, dass das array zu klein ist).
Mit dem Array wird dann noch weitergearbeitet, das ist aber ersteinmal egal
Hoffe, man verstehts :/
edit:
Die Lösung:
Um nach dem ersten readInt() das Leerzeichen bzw Enter wegzubekommen, setzen wir einfach danach ein leeres readLine() und somit funzt alles
Danke für die Tipps (wie einfach dann die Lösung doch war... )
Gruß Denne
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025