尝试使用java中的扫描器读取返回键的一个笔划作为输入?

尝试使用java中的扫描器读取返回键的一个笔划作为输入?,java,if-statement,java.util.scanner,Java,If Statement,Java.util.scanner,我正在制作一个程序,该程序将读取用户输入,并使用条件确定是否执行操作。如果用户点击justenter,没有输入任何其他内容,我想通过If循环一些内容。如果输入了其他内容,程序应返回到其他菜单。 以下是我到目前为止的情况: Scanner scnr = new Scanner(System.in); String choice = scnr.next(); if (choice.equals("")) { ... } else { ... } 当我运行它时,只需按enter键不

我正在制作一个程序,该程序将读取用户输入,并使用
条件确定是否执行操作。如果用户点击justenter,没有输入任何其他内容,我想通过If循环一些内容。如果输入了其他内容,程序应返回到其他菜单。
以下是我到目前为止的情况:

Scanner scnr = new Scanner(System.in);
String choice = scnr.next();
if (choice.equals("")) { 
    ...
}
else {
    ...
}
当我运行它时,只需按enter键不会影响任何内容,它只会使光标前进到控制台中的下一行。然而,当我键入某个内容时,当键入其他内容时,将其发送到菜单的错误部分工作正常。我在想,除了
scnr.next(),我还得用点别的东西
这是一个入门级的类,它要求我们使用scanner工具,而不是更高级的工具。提前谢谢

do
{   
    //string variable used to take scanner input when
    //looping generations
    String choice = "";
    printWorld( patternName, world, generationCounter);
    System.out.println("Options");
    System.out.println("(Enter): show next generation");
    System.out.println("end(Enter): end this simulation");
    System.out.print("Choice:");
    choice = scnr.nextLine();
    if (choice.length() == 0) {
        //used as a filler array when the method
        //next generation is called
        boolean newWorld[][] = new boolean [world.length][world[0].length];
        nextGeneration(world, newWorld);
        for (int i=0; i<newWorld.length;i++){
            for (int j = 0; j<newWorld[0].length; j++){
                world [i][j] = newWorld[i][j];
            }
        }
        generationCounter++;
        System.out.println("went through");

    } else {
        generationKill = 1;
        generationCounter = 1;
    }
} while (generationKill !=1);
do
{   
//字符串变量,用于在
//循环世代
字符串选择=”;
printWorld(patternName、world、generationCounter);
System.out.println(“选项”);
System.out.println(“(回车):显示下一代”);
System.out.println(“结束(回车):结束此模拟”);
系统输出打印(“选择:”);
choice=scnr.nextLine();
if(choice.length()==0){
//方法时用作填充数组
//下一代被称为
布尔新世界[][]=新布尔[world.length][world[0.length];
下一代(世界、新世界);

对于(int i=0;i尝试使用
scnr.nextLine();
而不是
scnr.next();

这是因为令牌。
next()
的文档说明:

公共字符串next()

查找并返回此扫描程序中的下一个完整令牌

令牌通常由空格(“\n”、“\t”、”)分隔,因此不会将您的“enter”或“\n”字符识别为令牌。这就是为什么它会一直读取,认为您没有输入任何令牌


另一方面,
nextLine()
将一直读取,直到找到一个“\n”字符。这意味着当您输入时,它读取的是一个“\n”字符,从而将您的
选择设置为

尝试使用
scnr.nextLine();
而不是
scnr.next();

这是因为令牌。
next()
的文档说明:

公共字符串next()

查找并返回此扫描程序中的下一个完整令牌

令牌通常由空格(“\n”、“\t”、”)分隔,因此不会将您的“enter”或“\n”字符识别为令牌。这就是为什么它会一直读取,认为您没有输入任何令牌


另一方面,
nextLine()
将一直读取,直到找到一个“\n”字符。这意味着当您输入时,它读取的是一个“\n”字符,从而将您的
选择设置为

你应该解释为什么
nextLine
有效,但
next
无效。如果我的解释中遗漏了什么,请告诉我。当我按enter键时,它似乎仍然不起作用,而现在当我按enter键之外的其他键时,该部分也不起作用。实际上,我所做的唯一一件事就是更改。next()到.nextLine(),我不知道为什么。@sparky你能更新你的代码吗?让我看看我是否能知道发生了什么事。`do{//这里会有一个菜单,上面有选项//和其他印刷品……choice=scnr.nextLine();if(choice.equals(“”){…}else{generationKill=1;}}while(generationKill!=1)`你应该解释为什么
nextLine
有效,但是
next
无效。如果我在解释中遗漏了什么,请告诉我。当我按enter键时,它似乎仍然不起作用,现在当我按enter键之外的其他键时,该部分也不起作用。实际上,我所做的唯一一件事就是将.next()改为.nextLine()我也不知道为什么。@sparky你能更新你的代码吗?让我看看我是否能知道发生了什么事。`do{//这里会有一个菜单,有选项//和其他印刷品……choice=scnr.nextLine();if(choice.equals(“”){…}else{generationKill=1;}}而(generationKill!=1)`