【问题标题】:Adding values based on common keys using arrays使用数组基于公共键添加值
【发布时间】:2013-01-09 10:33:53
【问题描述】:

我有 2 个数组 String key[]long value[] 。键可以重复。我需要唯一键及其映射中值的总和。下面是我正在尝试的代码,但我得到 Array out of bound 异常

public HashMap < String, Long > getValueMap(String key[], long value[]) {
    Map newmap = new HashMap();
    long count = 0;
    for (int i = 0; i < value.length; i++) {
        for (int j = 0; j < value.length; j++) {
            if (key[i] == key[j]) {
                count = count + value[j];
            }
        }
        newmap.put(key[i], count);

        count = 0;
    }
    return (HashMap < String, Long > ) newmap;

}


long[] value = {};
String key[] = {};
int i = 0;
        if(!worklogs.isEmpty()){
            for(Worklog wl:worklogs){
                value[i]=wl.getValue();
                key[i]=wl.getAuthor();i++;

            }
        }

HashMap < String, Long > newhm = getValueMap(key, value);
Iterator entries = newhm.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry entry = (Map.Entry) entries.next();
    String newkey = (String) entry.getKey();
    Long newvalue = (Long) entry.getValue();
    System.out.println("Key = " + newkey + ", Value = " + newvalue);
}

修改了上面的代码,使其看起来简单。请问有人可以帮忙吗?

【问题讨论】:

  • 在哪一行抛出异常
  • 在您的一个循环中,长度是可变的,在另一个循环中,它被硬编码为 10。您传入的数组有多长?
  • @Floris 长度是可变的..我把它放在一个 for 循环中只是为了显示......我实际上是在迭代一个对象列表(wl)
  • 你能解释一下第二个代码块试图做什么吗?它不能在 Java 中编译 - 是否意味着...?
  • 你为什么使用原始数组而不是List的实现?

标签: java arrays map


【解决方案1】:

这里数组长度等于0

long[] value = {};

在这里你尝试设置值并得到一个错误,因为数组长度 == 0

value[i] = wl.getValue();

使用 value.length 代替幻数 10

for(int i = 0; i < value.length; i++){  
   key[i] = wl.getAuthor();
}

【讨论】:

    【解决方案2】:

    这可能是因为数组 value 和 key 在尝试向它们添加值之前尚未初始化。

    long[] value= new long[10];

    String key[]= new String[10];

    为什么需要使用数组而不是列表?因为如果您需要变量的长度,我认为这将是一种更舒适的方法。

    【讨论】:

    • 好的,我会尝试使用 List 而不是数组,
    【解决方案3】:

    替换

         for(i,i<10,i++){
    

    for(i, i<Value.length(); i++){
    

    【讨论】:

      【解决方案4】:

      Key[] 可能比value[] 短。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-11
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 2011-05-03
        • 2015-04-05
        相关资源
        最近更新 更多