【问题标题】:Java is skipping a line (Strings in a Scanner ??) [duplicate]Java正在跳过一行(扫描仪中的字符串??)[重复]
【发布时间】:2013-06-18 00:24:38
【问题描述】:

我正在学习 Java,但我对它的了解并不多,我不知道为什么,但 Java 似乎跳过了一行。我不认为我所有页面中的代码真的很必要,所以我只放第一页和使用它时得到的结果。谢谢!

import java.util.Scanner;

public class First {
    public static void main(String args[]){
        Scanner scanz = new Scanner(System.in);
        System.out.println("Hello, please tell me your birthday!");
        System.out.print("Day: ");
        int dayz = scanz.nextInt();
        System.out.print("Month: ");
        int monthz = scanz.nextInt();
        System.out.print("Year: ");
        int yearz = scanz.nextInt();
        System.out.println("Now, tell me your name!");
        System.out.print("Name: ");
        String namez = scanz.nextLine();
        Time timeObject = new Time(dayz,monthz,yearz);
        Second secondObject = new Second(namez,timeObject);

        System.out.println("\n\n\n\n\n" + secondObject);
    }
}

跳过一行

        String namez = scanz.nextLine();

控制台输出:(请原谅生日,这是其他东西)

Hello, please tell me your birthday!
Day: 34
Month: 234
Year: 43
Now, tell me your name!
Name: 




My name is  and my birthday is 00/00/43

它没有给你机会给一个名字,它只是直接跳过并将名字作为空。请,如果有人可以,请告诉我为什么!我想学习 Java,但这个小烦恼挡住了我的路。

谢谢!

【问题讨论】:

  • 看看这篇文章,相信stackoverflow.com/questions/5032356/using-scanner-nextline>有你的答案。

标签: java string line


【解决方案1】:

问题是 nextLine 获取行上的任何字符,而 \n (换行符)是上面扫描仪输入留下的。

因此,它不会让您输入新内容,而是将 \n 作为输入并继续。

要修复,只需像这样将两个扫描仪背靠背放置:

System.out.print("Name: ");
scanz.nextLine();
String namez = scanz.nextLine();

只是使用:

String namez = scanz.next();

也可以,但会将名称限制为一个单词。 (也就是名字而已)

【讨论】:

  • 更具体地说,第一个 scanz.nextLine() 可以放在“int yearz = scanz.nextInt();”之后的任何位置行(不需要在第二个 nextLine 之前)。只需要从 nextInt() 获取其余的输入(因为换行符“\n”被留下)。这将允许第二个 scanz.nextLine() 等待并获取新的输入。
  • 我不明白为什么其他人删除了他的帖子 :(。我本来想说你的回答是对的,但如果你回来,你的回答也有帮助!谢谢,by方式。:)。
  • 顺便说一句,一旦我没有得到(因为我正在学习:D),如果您从第二个扫描仪获取输入,扫描仪就可以工作。我的意思是,它肯定能够接受第一个输入,然后 \n\n\n\n 会破坏第二个扫描仪吗?谢谢。
  • 我将通过一个示例进行演示:第一个扫描仪只获取 int。 Input = "34\n" 第二个扫描仪再次得到 int。 Input = "234\n" 第三个扫描仪再次得到 int。 Input = "43\n" 现在,名称的第一个扫描仪将获得 nextLine。由于输入“\n\n\n”仍然存在,因此将采用该输入。为了修复它,您必须添加另一个 nextLine。由于没有剩余字符,此扫描仪现在将等待并获取您输入的行作为名称。
  • 重要的是要注意,当您打印出 nextLine 变量的内容时,它不会打印出诸如 \n(换行符)、\t(制表符)等字符。这些是特殊字符.
【解决方案2】:

我相信nextLine 的预期用途是正确的。然而问题是nextInt 没有创建换行符,而是读取该行的其余部分(为空)。我相信,如果在此之后添加另一个 nextLine 语句,则代码将起作用。另一方面,Next 仅识别第一个单词,因此可能不是正确的解决方案。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2013-05-14
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多