Java for-Schleife überspringt eine Eingabe

MarcoRolex

Mitglied
Hallo Zusammen

Ich habe ein kleines Problem. Nämlich überspringt die for-Schleife eine Eingabe, also wartet nicht bis ich den Text eingegeben habe, und geht zur nächsten Anweisung.
Hier der Code:
Java:
public void eingabeSatz()
    {
       
        System.out.println("Wie viele Wörter hat ihr Satz?");
        anzahlWörter = scan.nextInt();
        String [] Satz = new String[anzahlWörter];
        for(int i = 1; i <= anzahlWörter; i++)
        {
            System.out.println("Geben Sie das " + i +". Wort ein.");
            i--;
            Satz[i] = scan.nextLine();
            i++;
        }

Die Ausgabe sieht dann so aus:
--------------------------------
Wie viele Wörter hat ihr Satz?
3
Geben Sie das 1. Wort ein.
Geben Sie das 2. Wort ein.
-------------------------------
Ich gebe halt die "3" ein und möchte dementsprechend das 1. Wort eingeben.
Aber leider kommt dann direkt die Meldung "Geben Sie das 2. Wort ein."

Hat jemand eine Lösung?

Gruss
 
Du solltest

scan.nextLine()

benutzen statt nextInt. Dann müsste es funktionieren. Ansonsten holt er nur das Int läßt aber ein linefeed im scanbuffer, welches den nächsten nextLine in der Schleife direkt zurückkehren läßt.

Gruß

Claus
 
Beispiele immer bitte möglichst vollständig.
So:
Java:
        Scanner scan = new Scanner(System.in);
        System.out.println("Wie viele Wörter hat ihr Satz?");
        int anzahlWörter = scan.nextInt();
        scan.nextLine();
        String [] Satz = new String[anzahlWörter];
        for(int i = 1; i <= anzahlWörter; i++)
        {
            System.out.println("Geben Sie das " + i +". Wort ein.");
            i--;
            Satz[i] = scan.nextLine();
            i++;
        }
        System.out.println("Arrays.toString(Satz) = " + Arrays.toString(Satz));

Code:
Wie viele Wörter hat ihr Satz?
5
Geben Sie das 1. Wort ein.
a
Geben Sie das 2. Wort ein.
b
Geben Sie das 3. Wort ein.
c
Geben Sie das 4. Wort ein.
d
Geben Sie das 5. Wort ein.
e
Arrays.toString(Satz) = [a, b, c, d, e]
 
Du solltest die for Schleife zusätzlich auch bei 0 beginnen lassen. Die 1 führt in deinem Fall nur zu unschönen Code. Außerdem verwendet man keine Umlaute im Quellcode und Variablennamen werden klein geschrieben.
Java:
System.out.println("Wie viele Wörter hat ihr Satz?");
String[] satz = new String[Integer.parseInt(scan.nextLine())];

for(int index = 0; index < satz.length; index++) {
    System.out.println(String.format("Geben Sie das %d Wort ein.", index + 1));
    satz[index] = scan.nextLine();
}
 
Du solltest die for Schleife zusätzlich auch bei 0 beginnen lassen. Die 1 führt in deinem Fall nur zu unschönen Code. Außerdem verwendet man keine Umlaute im Quellcode und Variablennamen werden klein geschrieben.
1. völliger quatsch, das ist geschmackssache.
2. Anfänger müssen sich nicht an Convention halten.
 
Darf ich mal erwähnen, dass Thalliuss Lösung nicht die erste bei StackOverflow ist, und er ein "Gefällt mir" bekommt, ich aber nicht?!?!
Außerdem entscheidest du nicht, wem geholfen wird, und wem nicht.
Wenn er als Basics noch nicht verstanden hat, dass man Scanner nicht verwenden sollte, dann bringt Convention auch nichts.
Also, berichtigt euren Fehler und dankt mir. 😀 (Yeah, heute bin ich schlecht "drauf" 😀 )
 
Darf ich mal erwähnen, dass Thalliuss Lösung nicht die erste bei StackOverflow ist, und er ein "Gefällt mir" bekommt, ich aber nicht?!?!
Und jetzt hat er sogar 2, sagt viel über die Antwortqualität aus 😉

Außerdem entscheidest du nicht, wem geholfen wird, und wem nicht.
Aber zumindest wem er hilft und wem nicht (und viele andere haben da die gleichen Kriterien), von daher hat er vollkommen Recht...

Wenn er als Basics noch nicht verstanden hat, dass man Scanner nicht verwenden sollte, dann bringt Convention auch nichts.
Da das der Hauptteil gefühlt jeden zweiten Beitrags von dir ist, gibts irgendwann auch mal ne Begründung dazu von dir?
Also, berichtigt euren Fehler und dankt mir. 😀 (Yeah, heute bin ich schlecht "drauf" 😀 )
Wer als Basic noch nicht verstanden hat, dass ... ach lassen wir das lieber...
 
Ich für meinen Teil bin immer froh wenn mir jemand sagt wie etwas 'eigentlich' gemacht wird und wie ich mich verbessern kann. (best practice sind Gold wert)
Wenn man nach seinem Studium/Ausbildung in ein neues Arbeitsverhältnis kommt und merkt das man Jahrelang quatsch gelernt hat hilft es einem auch nicht ein Rebell gewesen zu sein und sich nicht an Konventionen gehalten zu haben.
 
Ich hab euch doch schon erklärt, wie man es richtig macht.
1. Scanner nicht verwenden,
2. nextInt() nicht verwenden,
3. wenn doch nextInt(), dann anschließend nextLine(),
4. wenn 1. - 3. ignoriert wird, dann sind Convention auch egal,
5. vollständige Beispiele, SSCCE, schreiben,
6. einstellen? Wen oder was bei wem einstellen?
7. Ihr habt wohl ein paar Jahre das Falsche gelernt.

SO nennt zwei Möglichkeiten,
8. anschließend nextLine(), oder
9. gut und richtig Parsen.

Davon sehe ich alle noch weit entfernt.

"menschliche Interkommunikation" ---- mag schon sein, dass es das hapert, aber ich muss niemanden gefallen. Erst Recht nicht, wenn alle wie die Lemminge auf das falsche "Gefällt mir" klicken. Sonst fällt mir nicht so viel ein. Wer will ne Eis? 🙂
 
1. Scanner nicht verwenden,
2. nextInt() nicht verwenden,
Begründe doch mal, damits auch Anfänger verstehen.

3. wenn doch nextInt(), dann anschließend nextLine(),
Oder man passt den Delemiter an oder liest nicht Zeilenweise...

4. wenn 1. - 3. ignoriert wird, dann sind Convention auch egal,
Ich finde auch, das man eigentlich dringend mal das StGB aufheben sollte, bei den ganzen Geschwindigkeitsüberschreitungen die's täglich gibt...

6. einstellen? Wen oder was bei wem einstellen?
7. Ihr habt wohl ein paar Jahre das Falsche gelernt.
Listen sollten schon einen gemeinsamen Kontext haben (im Idealfall zur Überschrift passend)

SO nennt zwei Möglichkeiten,
8. anschließend nextLine(), oder
9. gut und richtig Parsen.
SO nennt so ziemlich alles, nach dem was du da so zitierst auch öfter mal veraltetes oder Unsinn...

Ich.
 

Neue Themen


Zurück
Oben