我正在尝试编写一个 java 程序来找出字符串中出现两次的单词数,但出现异常:数组索引越界输入:2 10 恨爱和平爱和平恨爱和平爱和平8 Tom Jerry Thomas Tom Jerry Courage Tom Courage输出:1 2完整的代码是:class GFG { public static void main (String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while(t>0){ int n = sc.nextInt(); int count = 0; String str = sc.next(); String strArray[] = str.split(" "); HashMap <String,Integer> wordCount = new HashMap<String,Integer>(); for(int i=0;i<n;i++){ if(wordCount.containsKey(strArray[i])){ wordCount.put(strArray[i],wordCount.get(strArray[i])+1)); } else{ wordCount.put(strArray[i],1); } } for (Map.Entry<String, Integer> entry : wordCount.entrySet()) { if(entry.getValue()==2) count++; } System.out.println(count); t--; } }}
2 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
String str = sc.next();
这段代码只能获取一个单词,但您打算获取n单词。
您可以摆脱数组,因为它是不必要的,然后使用:
for(int i=0;i<n;i++){
String word = sc.next();
if(wordCount.containsKey(word)){
wordCount.put(word,wordCount.get(word)+1));
}
else{
wordCount.put(word,1);
}
}
但是,更简洁的写法是:
for(int i=0;i<n;i++){
wordCount.compute(sc.next(), (word,count)-> (count==null)? 1 : count+1);
}
添加回答
举报
0/150
提交
取消