Проблема в строке repeatedElementMap.put(inputArr[i], count++);
Выражение count++
будет увеличивать значение count, но возвращает старое значение count .
Таким образом, код repeatedElementMap.put(inputArr[i], count++);
также можно записать так:
repeatedElementMap.put(inputArr[i], count);
count += 1;
Эффект будет таким же, но во втором коде вы четко видите, что есть проблема.
Решение
Заменить строку следующим образом: repeatedElementMap.put(inputArr[i], count + 1);
Редактировать
Как и в Azurefrog, упомянутой в комментариях, при поиске повторяющегося элемента есть еще одна проблема:
В последнем операторе if вы ищете содержащее значение, и если значение найдено, вы пытаетесь получить элемент. Но метод get ищет ключ, а не значение. Кроме того, я не совсем понимаю, почему вы используете модуль 2 вместо простого деления на 2. Лучшим способом было бы просто просмотреть записи и найти тот, который имеет искомое количество элементов, например:
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
Таким образом, полный рабочий код будет выглядеть так:
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
int[] inputArr = new int[] {1, 2, 3, 3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : " + repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count+1);
}
else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
return repeatedElement;
}
}