无法确定输入是否已结束

时间:2016-01-09 10:06:57

标签: java

我有以下输入。

    3
    sam
    99912222
    tom
    11122222
    harry
    12299933
    sam
    edward
    harry
    mark
    john

这是我的代码

public static void main(String[] argh) {
    Map<String, Integer> map = new HashMap<String, Integer>();
    List<String> keyList, outputList = new LinkedList<String>();
    Scanner in = new Scanner(System.in);
    int N = in.nextInt();
    for (int i = 0; i < N; i++) {
        String name = in.next();
        int phone = in.nextInt();
        in.nextLine();
        map.put(name, phone);
    }
    keyList = new ArrayList<String>(map.keySet());
    String s = in.nextLine();
    while (in.hasNext()) {
        if (keyList.contains(s)) {
            outputList.add(s + "=" + map.get(s));
        } else {
            outputList.add("Not found");
        }
        s = in.nextLine();
    }
    in.close();
    for (int i = 0; i < outputList.size(); i++) {
        System.out.println(outputList.get(i));
    }
}

我的问题是我无法确定输入是否已经结束,因为while (in.hasNext()) {在最后一次输入后冻结。如何在最后一次输入后关闭扫描仪?

enter image description here

1 个答案:

答案 0 :(得分:1)

您的while循环应为:

while (in.hasNextLine()) {
    String s = in.nextLine();
    if (s.isEmpty())
        break;
    if (keyList.contains(s)) {
        outputList.add(s + "=" + map.get(s));
    } else {
        outputList.add("Not found");
    }
}

这样输入中的空行表示输入的结束,这意味着您只需再次按Enter键退出程序。