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