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); 该对象需要重建,因为它已经具有价值。 祝你好运

链接地址: http://www.djcxy.com/p/96067.html

上一篇: Both next() and nextLine() not helping to store name with spacing

下一篇: Issues with nextLine();