2015-10-23 3 views
0

Я не уверен, почему значение не увеличивается в моем коде, когда код уже существует. Любой намек очень ценится:Увеличение значения hashmap, если ключ уже существует

import java.util.HashMap; 
public class MajorityElement { 

    public int majorityElement(int[] nums) { 
     int halfSize = nums.length/2; 
     int temp=0; 
     int majorityValue=0; 
     HashMap<Integer, Integer> valuesMap = new HashMap<>(); 

     for (int i = 0; i < nums.length; i++) { 
      if (valuesMap.containsValue(nums[i])) { 
       temp=valuesMap.get(nums[i]); 
       valuesMap.put(nums[i], temp++); 
      } else { 
       valuesMap.put(nums[i], 1); 
      } 
     } 
     for (Integer key : valuesMap.keySet()){ 
      if (valuesMap.get(key)>= halfSize){ 
       majorityValue=key; 
      } 
     } 
     return majorityValue; 

    } 
    public static void main(String[] argc){ 
     MajorityElement majority=new MajorityElement(); 
     int[] sampleArray={1,4,6,8,8,9,8,8,0,8}; 
     int majorityRes=majority.majorityElement(sampleArray); 
     System.out.println("majority value is = [" + majorityRes + "]"); 
     return; 
    } 
} 

UPDATE: Я изменил мой код

for (int i = 0; i < nums.length; i++) { 
      if (valuesMap.containsValue(nums[i])) { 
      // temp=valuesMap.get(nums[i]); 
       valuesMap.put(nums[i], valuesMap.get(nums[i])+1); 
      } else { 
       valuesMap.put(nums[i], 1); 
      } 
     } 

и до сих пор он печатает 0 для majorityRes. Любая идея, почему?

UPDATE ': Исправлена ​​ошибка, изменив ее на containsKey(), которая была опечаткой.

ответ

0

Ваша проблема в этой строке:

   valuesMap.put(nums[i], temp++); 

Когда ++ помещается непосредственно после имени переменной, Java выполняет команду, а затем увеличивает переменную один. Таким образом, эта строка использует исходное значение «temp» для выполнения команды и , затем, она увеличивается на единицу.

Что вы хотите сделать, это приращение переменной «темп» на один и , а затем выполнение команды. Для этого вам нужно поставить ++ перед именем переменной, как это:

   valuesMap.put(nums[i], ++temp); 

Таким образом, Java знает, чтобы увеличить переменную одним и затем выполнять остальную часть команды.

+0

Я сделал изменение, которое вы упомянули, и мой код все еще не работает! –

+0

какой выход @MonaJalal – John

1
temp=valuesMap.get(nums[i]); 
valuesMap.put(nums[i], temp++); 

temp находится в очереди после линии, поэтому он помещается в карту как старое значение.

Изменить это:

temp=valuesMap.get(nums[i]); 
temp++; 
valuesMap.put(nums[i], temp); 
+0

Почему вы увеличиваете темп дважды в своем коде? Не имеет большого смысла! –

+0

Даже в этом случае код не работает. Пожалуйста, взгляните на обновление! –

Смежные вопросы