Erste Schritte [Noob] Warum geht meine For-Schleife nicht?

erik4tw

Mitglied
N'Abend,

hier mal ein kleines Programm:

Java:
import java.util.Scanner;

public class Spiel {
	
	public static void main(String[] args)
	{		
		Scanner s = new Scanner(System.in);
		
		int num = getPlayerNum(s);
		
		String[] names = new String[num];
		
		for(int i=0;i<num;i++)
		{
			System.out.println("Spieler " + (i+1) + ", wie heißt du?");
			names[i] = s.nextLine();
		}
		
		for(String index:names)
		{
			System.out.println(index);
		}
			
		
	}
	
	static int getPlayerNum(Scanner s)
	{
		int number;
		
		System.out.println("Wie viele Spieler?");
		number = s.nextInt();
		
		return number;
	}
}

Zuerst wird der Spieler also über die Funktion getPlayerNum gefragt, wie viele Spieler mitspielen. Dieser Wert wird in num gespeichert.

Dann wird über die for-Schleife jeder Spieler gefragt, wie er heißt.
Allerdings wird beim ersten Durchlauf der Spieler, also Spieler 1 übersprungen. Danach wird ganz normal weiter gefragt. Am Ende werden die Namen ausgegeben und bei Spieler 1 ist eine Lücke. Die Konsole sieht dann also so aus:

Code:
Wie viele Spieler?
3
Spieler 1, wie heißt du?
Spieler 2, wie heißt du?
Max
Spieler 3, wie heißt du?
Moritz

Max
Moritz

Nach Spieler 1 kann ich also als Einziges nicht den Namen eingeben.

Ich habe rausgefunden, dass, wenn ich statt int num = getPlayerNums(s) eine feste Zahl, also int num = 5 eingebe, alles funktioniert.

Ist bestimmt ganz einfacher Fehler, aber ich komm nicht drauf.

Danke für eure Hilfe

LG Erik
 
Zuletzt bearbeitet:
Java:
System.out.println("Wie viele Spieler?");
		number = s.nextInt();

Println erzeugt am Ende einen Zeilenumbruch, der aber nicht von nextInt() konsumiert wird. Du hast also nach dieser Zeile einen Zeilenumbruch zu viel auf der Konsole rumschwirren. Bei der ersten Namensabfrage wird dieser Zeilenumbruch eingelesen.

Die Lösung ist also, entweder nach nextInt() ein readLine() einzufügen, oder nextInt() komplett wegzulassen und dafür mit readLine() einen String einzulesen und in einen Integer zu parsen.
 

Zurück
Oben