当前位置: 首页 > 知识库问答 >
问题:

映射缩减数组越界异常

公冶智刚
2023-03-14

我很困惑为什么会发生这种情况。我已经在这方面工作了一段时间,我只是不明白。

我的Map代码工作时,我能够在它所在的目录中验证输出。

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        String stateKeyword = value.toString();
        String[] pieces = new String[] {stateKeyword};

        for (String element : pieces) {
            String name = element.split(":")[0].trim();
            String id = element.split(":")[1].trim();
            Integer rank = Integer.parseInt(element.split(":")[2].trim());
            context.write(new Text(name), new Text(id + ":" + rank));
        }   
    }
        List<String> elements = new ArrayList<String>();
        Text word = new Text();
        for (Text val : values) {
            if (val.toString().contains(":")) {
                String state = val.toString().split(":")[0];
                word.set(state);
            }
            context.write(key, word);
        }
    }

文件中的输出如下所示:

Name   id:rank
Name   id:rank
Name   id:rank

...
...
...

但是为什么我不能拆分ID和rank呢?

共有1个答案

陶征
2023-03-14

若要避免ArrayOutOfBoundsException,请在从数组中获取值之前检查数组大小。像这样的事情会更合适:

    String[] temp = element.split(":"); 
    if(element.size()==2){
       String name = temp[0].trim(); 
       String id = temp[1].trim();
     }
 类似资料:
  • 这是我的代码: 该程序的目的是要求用户输入一个字符串,然后统计字符串中每个字符的使用次数。 当我去编译程序时,它工作正常。当我运行程序时,我可以在弹出框中输入字符串,但是在我提交字符串并按确定后,我得到一个错误,说 我不完全确定问题是什么或如何解决。

  • 我正在尝试学习异常处理。我似乎找不到String[]a=names(scnr);若要在超出3个元素时抛出超出界限的异常,请执行以下操作。我知道,大多数人都讨厌越界的错误,而我正在努力让它发生,我一辈子都搞不清我到底做错了什么。一整天都在搜索各种东西。但我似乎找不到我要找的东西。所以我需要一些帮助和视角。 因此,我输入一个完整的字符串,我根据逗号和空格对其进行定界(修剪和拆分),然后将这些片段存储到

  • 我一直在四处寻找是否有任何东西可以帮助我,但我不太了解人们的回答,任何我所了解的似乎都不能解决问题!所以基本上正如标题所说,我得到了一个数组索引越界异常,但我不知道为什么。非常感谢任何帮助。 代码:

  • 问题内容: 在我的游戏代码中,我尝试添加一张手牌。一旦我做完了,我的数组就超出了范围。一切看起来都不错,但也许我缺少了一些东西。 仅供参考,一个和两个是Player实例。来自Main类的相关代码(对格式感到抱歉。我很想将其传输到Stack Overflow): 卡类: 玩家等级: 问题答案: 问题出在你的循环上 没有其他任何值可设置,因此此循环不断循环,直到所有玩家拥有超过52张牌为止。一旦某人拥

  • 我在1.1GB文件上运行Hadoop MapReduce多次,使用不同数量的映射器和化简器(例如,1个映射器和1个化简器,1个映射器和2个化简器,1个映射器和4个化简器,...) Hadoop安装在具有超线程的四核机器上。 以下是按最短执行时间排序的前 5 个结果: 1 - 8 个化简器和 1 - 8 个映射器的结果:列 = 映射器行数 = 化简器数 (1)当我有8个映射器时,程序运行速度似乎稍快

  • 我使用String[3]数组来存储来自4个JTextFields的用户输入,然后将该数组输出到一个txt文件: 有人能告诉我为什么我会得到异常“数组索引越界”吗?谢谢。