这是我之前的问题How to add values in a multi map
的扩展我能够在多地图中添加值,但问题是当它找到重复的键时,它应该添加与其键对应的值。然后,一旦当前密钥更改为另一个数字,它应该使总和= 0.00,然后使用不同的重复密钥号重新开始。在下面的代码中,我不知道在何处使sum = 0.00以及在何处打印该值,因此它只打印出具有总计值的键。
以下是代码 (更新代码) :
// create a Map()
Map<String, String> readValuemap = new LinkedHashMap<String,String>();
String val = null;
for(int i =0; i< 256;i++){
for(int y=0; y< 256; y++){
//reading in the values.
String x = image.getLocationAsString(i, y);
String n = image.getValueAsString(i, y);
//Parsing them into "key" and "value".
String delim = ", value=";
String [] tokens = n.split(delim);
double num = Double.parseDouble(tokens[1]);
String stringNum = String.valueOf(num);
String [] t = x.split("r=");
String[] b = t[1].split(" mm/c");
//System.out.print("Meet b: "+b[0]);
double radius = Double.parseDouble(b[0]);
String stringRad = String.valueOf(radius);
//System.out.println("The radius: "+radius);
//retrieve the current value for the key from the map.
val = readValuemap.get(radius);
System.out.println(val);
//if null, just put the value into the map.
if(val == null){
readValuemap.put(stringRad, stringNum);
System.out.println("new if; "+val);
}
else{
//if not null, add the current value to the new value (the one that you just read in)
//and store the sum in the map.
double v = Double.parseDouble(val);
v += num;
String newValue = String.valueOf(v);
System.out.println("new value; "+newValue);
readValuemap.put(stringRad, newValue);
}
}
}
System.out.println("-------------Printing out the values----------------");
Iterator iter = readValuemap.entrySet().iterator();
while(iter.hasNext()){
Map.Entry pairs = (Map.Entry)iter.next();
System.out.println(pairs.getKey() + " = "+ pairs.getValue());
}
所以基本上它应该是这样的:multimap包含:
1.36 = 59.0
1.36 = 65.0
1.35 = 56.0
1.35 = 71.0
1.34 = 64.0
1.34 = 75.0
1.33 = 59.0
之后它应该是这样的(它应该在multimap中找到任何重复的键并添加值):
1.36 = 124.0
1.35 = 127.0
1.34 = 139.0
1.33 = 59.0
现在写下它只是添加所有值,无论密钥是否重复。
答案 0 :(得分:0)
您的解决方案似乎存在缺陷;你不需要多地图。 试试这个:
编辑
stringRad = b[0];
System.out.println("new if; "+val);
永远不会在if val == null
块中有价值。请尝试使用+ stringRad
或+ stringNum
代替+val
。