next()和nextLine()都不能以间距存储名称
我正在使用扫描仪来记录用户输入的字符串并将其打印出来。 如果用户输入是一个单独的名称,如Alan,它可以正常工作。 如果我输入带有空格的名称(如Alan Smith),则会返回一个错误,指示InputMisMatchException。
我在这里阅读了类似的案例,他们建议使用nextLine()而不是next()。 它有道理,但这对我也不起作用。 当我使用nextLine()时,它立即跳过我输入名称的步骤,并返回到循环的开始,要求我再次输入选择。 请咨询我如何解决这个问题。 谢谢。
import java.io.IOException;
import java.util.Scanner;
public class ScannerTest {
static String name;
static Scanner in = new Scanner(System.in);
static int choice;
public static void main(String[] args) {
while(choice != 5){
System.out.print("nEnter Choice :> ");
choice = in.nextInt();
if(choice == 1){
try{
printName();
}
catch(IOException e){
System.out.println("IO Exception");
}
}
}
}
private static void printName()throws IOException{
System.out.print("nEnter name :> ");
name = in.next();
//name = in.nextLine();
if (name != null){
System.out.println(name);
}
}
}
试试这个:add name = in.nextLine();
choice = in.nextInt();
后choice = in.nextInt();
。
然后尝试替换name = in.next();
与name = in.nextLine();
说明:在扫描程序调用nextInt()
它获得第一个值并将字符串的其余部分留给n
。 然后我们使用nextLine()
消耗字符串的其余部分。
第二个nextLine()
然后用于获取您的字符串参数。
问题很简单:当你提示用户输入他/她的选择时,选择将是一个int
然后是一个新行(用户将按Enter键)。 当你使用in.nextInt()
来检索选择时,只有数字被消耗,新的行仍然在缓冲区中,所以,当你调用in.nextLine()
,你会得到任何号码和新行(通常没有)。
你必须做的是在读取数字之后调用in.nextLine()
以清空缓冲区:
choice = in.nextInt();
if (in.hasNextLine())
in.nextLine();
之前调用name = in.next();
in = new Scanner(System.in);
执行此操作in = new Scanner(System.in);
该对象需要重建,因为它已经具有价值。 祝你好运
上一篇: Both next() and nextLine() not helping to store name with spacing