如何在循环中读取带有空格的字符串(Java)

时间:2012-11-23 00:03:53

标签: java while-loop whitespace java.util.scanner

这总让我头疼。我试图在while循环中为“name”和“malady”字段读取并保存多个字符串。这是我的代码:

while(OR1.isFull() == false || OR2.isFull() == false)
{
    // prompt for next request
    System.out.println("Enter patient info:");

    // read patient info
    System.out.print("Name: ");
    String name = input.nextLine();
    input.nextLine();
    System.out.print("Malady: ");
    String malady = input.nextLine();
    input.nextLine();
    System.out.print("Priority: ");
    int priority = input.nextInt();

    // store patient info
    Patient patient = new Patient(name, malady, priority);

    OR1.add(patient);

} // end while

System.out.println("List of patients scheduled for Operating Room 1");
while(OR1.isEmpty() == false)
{
    // pop and print root
    System.out.print(OR1.remove());
}

这是我的控制台输入和输出的样子:

输入患者信息:
姓名:John Doe
马拉迪:臀部骨折

优先级:6

预定进入手术室1的患者名单 患者:Malady:臀部骨折优先级:6

//结束控制台输出。

请注意,它没有记录我为“Name”输入的值,并且在获得“Malady”之后还提示输入额外的输入行(要求我再次按Enter键以获取它以请求下一个输入,“优先”)。

我已阅读http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html处的文档。我尝试过next()和nextLine()的不同组合。我只是不明白。

通过将代码更改为以下内容解决了问题:

        // read patient info
        System.out.print("Name: ");
        input.nextLine();
        String name = input.nextLine();
        System.out.print("Malady: ");
        String malady = input.nextLine();
        System.out.print("Priority: ");
        int priority = input.nextInt();

虽然我仍然对这个愚蠢的扫描仪如何工作感到困惑= /

2 个答案:

答案 0 :(得分:0)

我认为它应该适用于:

// read patient info
System.out.println("Name: ");
String name = input.nextLine();
System.out.println("Malady: ");
String malady = input.nextLine();
System.out.println("Priority: ");
int priority = input.nextInt();

也许问题出现在Patient构造函数中?

答案 1 :(得分:0)

通过将代码更改为以下内容解决了问题:

    // read patient info
    System.out.print("Name: ");
    input.nextLine();
    String name = input.nextLine();
    System.out.print("Malady: ");
    String malady = input.nextLine();
    System.out.print("Priority: ");
    int priority = input.nextInt();