为了账号安全,请及时绑定邮箱和手机立即绑定

遍历哈希图时数组索引越界异常

遍历哈希图时数组索引越界异常

Cats萌萌 2021-08-25 17:28:41
我正在尝试编写一个 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);

}


查看完整回答
反对 回复 2021-08-25
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

我认为

for(int i=0;i<n;i++){

应该:

for(int i=0; i < strArray.length; i++) {


查看完整回答
反对 回复 2021-08-25
  • 2 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信