在第一次扫描时使用scanner.nextLine 时,扫描仪会跳到第二次扫描

时间:2021-01-29 03:27:41

标签: java

我有 Contact 课,它工作正常。要添加联系人,我使用下面的代码

import java.util.Scanner;

public class Main{
 public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);

    System.out.println("ADD NEW CONTACT");
    System.out.println("\tEnter name of contact:");
    String name = scanner.nextLine();
    System.out.println("\tEnter number of contact:");
    String number = scanner.nextLine();
    
    Contact contact = new Contact();
    contact.add(name, number);

 }

}

问题是它忽略了第一次扫描并跳到 Enter number of contact

我知道 scanner.next() 会解决这个问题,但我希望联系人的姓名有空格

1 个答案:

答案 0 :(得分:0)

问题不是真的扫描器跳过它,而是你不够快:)!但是,这不是您,您必须以每毫秒大约 100 个字的速度输入才能完成此操作! 这是发生的事情:

Scanner scanner = new Scanner(System.in);

您创建了一个扫描仪。

System.out.println("ADD NEW CONTACT");

您打印 ADD NEW CONTACT

System.out.println("\tEnter name of contact:");

您打印 Enter name of contact:

String name = scanner.nextLine();

扫描仪在此 println 的纳秒内进行扫描。 你太慢了:)!

System.out.println("\tEnter number of contact:");

它打印出Enter number of contact: 在您意识到自己有机会对第一个提示做出反应之前。

String number = scanner.nextLine();

它现在耐心等待,因为它无事可做。您现在可以用您的凡人反应输入联系电话。

那么你怎么能把电脑放慢到凡人的速度呢? 以下是三种解决方案:

  1. 在“姓名”下创建第一个扫描仪,在“联系人”下创建另一个扫描仪。 在使用第一个扫描器之前,不会运行第二个扫描器。

  2. 使用一个扫描仪创建一个多行流程,该流程需要两行,不以“打印这个”和“打印那个”分隔。

  3. 使用 Thread.sleep(),它会暂停以让用户有时间进入:

     System.out.println("\tEnter name of contact:");
     String name = scanner.nextLine();
     Thread.sleep(3000)//3000 milliseconds = 3 seconds, or however long you want
     System.out.println("\tEnter number of contact:");
    

这会使进程在您指定的毫秒内休眠,以便下一个 println 在该时间过去之前不会执行。这样,您就可以输入联系人姓名,而无需计算机以闪电般的速度运行。