В мультикарте добавляйте только повторяющиеся значения (настройка переменной суммы)

Это расширение моего предыдущего вопроса Как добавить значения в мультикарту

Мне удалось добавить значения в мультикарту, но проблема в том, что когда она находит повторяющиеся ключи, она должна добавлять значения, соответствующие своим ключам. Затем, как только текущий ключ изменится на другой номер, он должен сделать сумму = 0,00, а затем начать снова с другим дублирующимся номером ключа. В следующем коде я не знаю, где сделать сумму = 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());
            }

Так что в основном это должно быть так: мультимап содержит:

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

После этого должно получиться так (он должен найти дублирующиеся ключи в мультикарте и добавить значения):

1.36 = 124.0
1.35 = 127.0
1.34 = 139.0
1.33 = 59.0

Напишите сейчас, это просто добавление всех значений независимо от того, является ли ключ дубликатом или нет.


person selena    schedule 10.06.2014    source источник


Ответы (1)


Похоже, ваше решение ошибочно; вам не нужна мультикарта. Попробуй это:

  1. создайте Map() (где что-то Double, Float или что-то еще, что вы используете в качестве суммы).
  2. читать в одну строку (например, 1,36 = 65,0).
  3. разобрать его на ключ и значение (например, ключ: 1,36, значение: 65,0)
  4. получить текущее значение ключа с карты.
  5. если ноль, просто поместите значение на карту.
  6. если не ноль, добавьте текущее значение к новому значению (тому, которое вы только что прочитали) и сохраните сумму на карте.
  7. повторять до тех пор, пока не перестанет вводиться.

Правки

  1. Не храните сумму в виде строки; сохраните его как Double на карте.
  2. Вам, вероятно, не нужен parsedouble на радиусе; просто сохраните значение из b[0] в качестве радиуса. Например, stringRad = b[0];
  3. Сохранение и извлечение с использованием одного и того же примитивного типа. Вы используете строку (stringRad) и используете двойной (радиус).
  4. System.out.println("new if; "+val); никогда не будет ценным в блоке if val == null. Попробуйте + stringRad или + stringNum вместо +val.
person DwB    schedule 10.06.2014
comment
Итак, я сделал, как вы предложили (вы можете увидеть код в моем обновленном вопросе), но, похоже, он не добавляет значения, а заменяет его. Что я здесь делаю неправильно? - person selena; 11.06.2014