1

私は2つの配列を持っていString key[]ますlong value[]。キーは複製できます。マップ内の一意のキーとそれらの値の合計が必要です。以下は私が試しているコードですが、配列が範囲外の例外を取得します

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

上記のコードは、見た目がシンプルになるように変更されています。誰か助けてください。

4

4 に答える 4

1

交換

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

for(i, i<Value.length(); i++){
于 2013-01-25T13:00:08.613 に答える
1

ここで、配列の長さは 0 です

long[] value = {};

ここで値を設定しようとすると、配列の長さ == 0 のためエラーが発生します

value[i] = wl.getValue();

value.lengthマジックナンバー10の代わりに使う

for(int i = 0; i < value.length; i++){  
   key[i] = wl.getAuthor();
}
于 2013-01-25T13:00:43.820 に答える
1

これは、値を追加しようとする前に配列の値とキーが初期化されていないことが原因である可能性があります。

long[] value= new long[10];

String key[]= new String[10];

リストの代わりに配列を使用する必要があるのはなぜですか? 長さを可変にする必要がある場合は、より快適なアプローチになると思います。

于 2013-01-25T13:11:33.953 に答える
1

Key[]よりも短い場合がありvalue[]ます。

于 2013-01-25T12:57:22.117 に答える