当前位置: 首页 > 知识库问答 >
问题:

扫描器nextLine()问题

谭富
2023-03-14

一段时间以来,我一直在做一个作为拼字字典的编程作业。该程序接受用户的输入,并输出一个包含单词列表的文件,这取决于用户从菜单中请求的内容。我遇到的问题与Scanner.nextLine()有关。

我不是很清楚为什么,但由于某种原因,有时我必须按一次enter键,然后我的代码才会接受我的输入并将其存储为变量。本质上,我最终输入了两次输入。我尝试在代码周围插入Scanner.nextLine()以“占用”空的enter/空格,但这不起作用,我必须多次按enter才能使它处理我想要的内容。

有人有什么建议吗?我会很感激你的帮助。

下面是一些代码:

System.out.println("Enter the length of the word you are" + " searching for.");
int n = -1;
while(!(n >=0)) {
    if(in.hasNextInt())
        n = in.nextInt();
    else {
        System.out.println("You have not entered a valid number. 
                            Please enter a real number this  time.");
        in.nextLine();
    }   
}
in.nextLine();
System.out.println("Enter the first letter of the words" + " you are searching for.");
String firstLetter = "";
while(!(firstLetter.length() == 1)) {
    if(in.nextLine().length() > 1) {
        System.out.println("You have not entered a valid letter. 
                            Please press enter and enter only one real letter.");
    } 
    else if(in.hasNextInt()) {
        System.out.println("Do not enter a number. Please enter one real letter.");
    }
    else {
        in.nextLine();
        firstLetter = in.nextLine();
        break;
    }
}

共有1个答案

叶鹭洋
2023-03-14

我认为您使用了太多的nextline来补偿。在输入int后,您可能希望执行一次这样的操作来清除行,例如,清除换行符,但第二次只吸收了额外的一行输入:

System.out.println("You have not entered a valid number. Please enter a real number this time.");
            in.nextLine();//first time
            }   
        }
        in.nextLine();//this second time is unnecessary.

同样的情况也发生在您的重复使用中:

in.nextLine();
firstLetter = in.nextLine();
break;

您只应在输入NextSomethingElse()和另一个NextLine()之间立即添加一个额外的in.NextLine()

此外,请注意,每当您调用in.nextLine()时,您都会吸收一行输入。例如,这条线应该是固定的:

        if(in.nextLine().length() > 1){

因为它读入一行,用完它,然后检查那一行(现在用完)是否足够长。

 类似资料:
  • 我有两个do-while循环用于进行自定义输入验证。问题是它会自动进入下一个do while循环。正确插入名称后,我必须放置一个新的下一行():name=scanner。nextLine() 我知道当光标停留在那里时,nextLine()会出现“小故障”,您必须调用nextLine()才能继续。资料来源:https://www.geeksforgeeks.org/why-is-scanner-sk

  • 在Java方面,我是一个业余爱好者,所以请原谅我的问题,如果它看起来很愚蠢:-P我有以下代码,旨在计算文件中的行数: 所以它很好,但我想将扫描仪重新用于其他目的,但nextLine已移动到文件的最后一行,我想将其重置回第一行。 (取而代之的是,我不得不使用另一台扫描仪来实现另一个目的,而在我看来,这似乎没有它应有的优雅。) 我肯定肯定有一种扫描仪方法可以将计数器重置为零? 谢谢 CJ

  • 首先为标题感到抱歉,想不出别的了。我目前正在完成一个关于JetBrains Hyperskill的项目,该项目是一个单位转换器,用户可以在其中转换重量、长度和温度单位。我几乎完成的项目,转换工作很好,但我有一个问题与用户输入。 用户输入由以下部分组成: 因此,用户可以输入如下内容: null null -要转换的数量 -这应该是像“摄氏”和“摄氏度”这样的输入 -随机单词 -这也应该读取输入,如“

  • 我有下面的代码 每次我输入名字,然后点击回车,什么也没有发生我再次输入名字,什么也没有发生,我第三次输入名字,这里,它打印出来。第二个字符串也会出现同样的情况 我不明白会有什么问题。

  • < b >想改进这个问题?更新问题,以便通过编辑此帖子用事实和引用来回答问题。 我知道使用nextInt()方法不会消耗新行字符,所以为了处理这个问题,我需要使用一个空的nextLine()方法继续。 我的问题是,作为一种替代解决方案,程序是否会对任何类型的运行时错误开放以使用两个扫描仪,一个用于字符串输入,一个用于整数? 感谢您的任何帮助! (经过编辑,因此问题不那么主观)