Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java next()和nextLine()都不帮助用空格存储名称_Java_Java.util.scanner - Fatal编程技术网

Java next()和nextLine()都不帮助用空格存储名称

Java next()和nextLine()都不帮助用空格存储名称,java,java.util.scanner,Java,Java.util.scanner,我目前正在使用扫描仪记录用户输入的字符串并打印出来。如果用户输入的是单个名称,如Alan,则可以正常工作。如果我输入一个带有空格的名称,比如Alan Smith,它会返回一个错误,称为InputMisMatchException 我在这里阅读了类似的案例,他们建议使用nextLine()而不是next()。这是有道理的,但对我来说也不行。当我使用nextLine()时,它会立即跳过输入名称的步骤,并返回到循环的开始,要求我再次输入选项。请建议我如何纠正这一点。多谢各位 import java.i

我目前正在使用扫描仪记录用户输入的字符串并打印出来。如果用户输入的是单个名称,如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);
        }
    }  
}  

试试这个:在.nextLine()中添加
name=in
choice=in.nextInt()之后

然后尝试替换.next()中的
name=in
name=in.nextLine()

说明:在扫描程序调用
nextInt()
后,它将获取第一个值,并将字符串的其余部分留给
\n
。然后使用
nextLine()
使用字符串的其余部分


然后,第二个
nextLine()
用于获取字符串参数。

问题很简单:当提示用户输入其选择时,选择将是一个
int
,后跟一个新行(用户将按enter键)。当您在.nextLine()中使用
检索选项时,只会使用数字,新行仍将在缓冲区中,因此,当您在.nextLine()中调用
时,您将得到数字和新行之间的任何内容(通常为零)

您需要做的是在读取数字后立即调用.nextLine()中的
,以清空缓冲区:

choice = in.nextInt();

if (in.hasNextLine())
    in.nextLine();

在调用
name=in.next()之前执行此操作
in=新扫描仪(System.in)
对象需要重新生成自身,因为它已具有值。

祝你好运

我不太明白为什么这个答案得了-1分。它实际上是有效的,但是正在思考为什么它有助于清除错误。添加了一个解释。