首页 > 解决方案 > 遍历哈希图时数组索引越界异常

问题描述

我正在尝试编写一个 java 程序来找出字符串中出现两次的单词数,但我遇到了一个异常:

数组索引越界

输入:

2 10 恨爱和平 爱和平 恨爱和平 爱和平 8 汤姆杰瑞 托马斯 汤姆杰瑞的勇气 汤姆的勇气

输出:

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--;

        }
    }
}

标签: javaarrayshashmap

解决方案


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);
}

推荐阅读