为什么循环没有在这里中断?

1bqhqjot  于 2021-07-04  发布在  Java
关注(0)|答案(3)|浏览(358)
class hashmaps{
public static void main(String args[]){
    Scanner s = new Scanner(System.in);
    LinkedHashMap<String,Integer> hm = new LinkedHashMap<String,Integer>();
    while(true){
        String a=s.next();
        if(a.equals("") || a==null){
            break;
        }
        else if(!hm.containsKey(a)){
            hm.put(a,1);
        }
        else{
            hm.put(a,hm.get(a)+1);
        }
    }
    System.out.println(hm);
}
}

当用户输入空值或字符串时,我尝试从用户获取无限值,并尝试打印hashmap中存储的值,但当我在控制台中输入空值时,循环没有中断。

xurqigkl

xurqigkl1#

你需要使用 nextLine(); 而不是 next() 它等待获取非空白内容,因此当它看到换行符时不会停止 nextLine . 也
这个 null 支票没用
你可以用 isEmpty 提高增量 merge ```
Scanner s = new Scanner(System.in);
LinkedHashMap<String, Integer> hm = new LinkedHashMap<>();
while (true) {
System.out.print("Give a word: ");
String a = s.nextLine();
if (a.isEmpty()) {
break;
}
hm.merge(a, 1, Integer::sum);
}
System.out.println(hm);

这个 `hm.merge(a, 1, Integer::sum);` 方法
对于键 `a` 把价值 `1` 如果值已存在,请应用 `Integer::sum` ,与相同 `(prevVal, value) -> prevVal + value` 
jhiyze9q

jhiyze9q2#

您需要使用s.nextline()而不是s.next(),请检查下面修改的代码:

public class hashmaps{
public static void main(String args[]){
    Scanner s = new Scanner(System.in);
    LinkedHashMap<String,Integer> hm = new LinkedHashMap<String,Integer>();
    while(true){
        String a=s.nextLine();
        if(a==null || a.equals("")){
            break;
        }
        else if(!hm.containsKey(a)){
            hm.put(a,1);
        }
        else{
            hm.put(a,hm.get(a)+1);
        }
    }
    System.out.println(hm);
} }
dxxyhpgq

dxxyhpgq3#

其中一个主要问题是 s.next() 而不是 s.nextLine() :这两种方法的区别在于 Scanner.next() ,我引用java文档,
查找并返回来自此扫描仪的下一个完整令牌。完整的标记前面和后面是与分隔符模式匹配的输入。此方法可能会在等待扫描输入时阻塞,即使先前对hasnext()的调用返回true也是如此。 Scanner.nextLine() ,相反,
使扫描器超过当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。
除此之外,当你创建一个扫描器,你必须提醒总是关闭它当你完成,因为它会导致内存泄漏,如果你不再使用它。另外,我强烈建议在需要比较两个字符串时使用 equals() 方法,但在这种特定情况下也可以使用更实用的方法 isEmpty() . 我建议你通过阅读这个关于这个主题的很棒的答案和字符串文档来深入研究这个主题。总之,代码应该是这样的:

public static void main(String args[]){
        Scanner s = new Scanner(System.in);
        LinkedHashMap<String,Integer> hm = new LinkedHashMap<String,Integer>();
        while(true){
            String a=s.nextLine();
            if(a.isEmpty())
                break;
            else if(!hm.containsKey(a))
                hm.put(a,1);
            else
                hm.put(a,hm.get(a)+1);
        }
        s.close();
        System.out.println(hm);
    }

相关问题