我有这个代码,一切都在运行,因为我想要除了第一次它应该等待用户的下一个输入时跳过的面部。这是代码:
import java.util.Scanner;
public class mainThread {
public static int size;
public static int counter;
public static Scanner input = new Scanner(System.in);
public static String currentIn;
public static void main(String[] args){
System.out.println("Please type the desired amount of players: ");
size = input.nextInt();
String nameArray[] = new String[size];
for(int counter = 0; counter < size; counter++){
System.out.println("Please enter the name of player " + (counter+1));
currentIn = input.nextLine();
nameArray[counter] = currentIn;
System.out.println(nameArray[counter]);
}
}
}
以下是控制台所说的内容:
Please type the desired amount of players:
3
Please enter the name of player 1
Please enter the name of player 2
Jacob
Jacob
Please enter the name of player 3
它完全跳过第一个循环,我似乎无法弄清楚原因。谢谢你的时间!
答案 0 :(得分:1)
nextInt()
只读取“3”,但不读取换行符。它基本上只是读取第一个令牌分隔符,但不消耗它。所以,如果你输入
3 Foo
和然后点击返回,它会以“Foo”作为第一个玩家的名字。
听起来你可能想要在找到玩家数量时使用nextLine()
:
String playerCountText = input.readLine();
size = Integer.parseInt(playerCountText); // Or use a NumberFormat
就我个人而言,我总是发现Scanner
有点像这样烦人 - 它有望使一切变得简单,但你真的需要解决它将要做的所有事情......
答案 1 :(得分:1)
修改程序如下:
import java.util.Scanner;
public class mainThread {
public static int size;
public static int counter;
public static Scanner input = new Scanner(System.in);
public static String currentIn;
public static void main(String[] args){
System.out.println("Please type the desired amount of players: ");
size = Integer.parseInt(input.nextLine().trim());
String nameArray[] = new String[size];
for(int counter = 0; counter < size; counter++){
System.out.println("Please enter the name of player " + (counter+1));
currentIn = input.nextLine();
nameArray[counter] = currentIn;
System.out.println(nameArray[counter]);
}
}
}
问题是\n
仍留在缓冲区中,这就是为什么跳过了.nextLine()
..
编辑,以下程序也进行了一些输入验证:
import java.util.Scanner;
public class mainThread {
public static int size;
public static int counter;
public static Scanner input = new Scanner(System.in);
public static String currentIn;
public static void main(String[] args){
boolean valid = false;
System.out.println("Please type the desired amount of players: ");
while(valid == false){
try{
size = Integer.parseInt(input.nextLine().trim());
valid = true;
}catch(Exception e){
System.out.println("Error input, try again");
}
}
String nameArray[] = new String[size];
for(int counter = 0; counter < size; counter++){
System.out.println("Please enter the name of player " + (counter+1));
currentIn = input.nextLine();
nameArray[counter] = currentIn;
System.out.println(nameArray[counter]);
}
}
}
答案 2 :(得分:0)
我不确定问题是什么,但是如果你更换了这行
currentIn = input.nextLine();
使用:
currentIn = input.next();
它会起作用。
答案 3 :(得分:0)
基本上是当你输入输入3然后按回车键时,输入计为一个新的行值,它保留在缓冲区中,当你试图在循环中读取一个新行时
currentIn = input.nextLine();
第一次将存储的新行作为输入。 你可以通过添加避免这种情况 currentIn = input.nextLine(); 后 size = input.nextInt();
或从文件中读取输入。