#java #hashmap
#java #hashmap
Вопрос:
import java.io.*;
import java.util.*;
class Solution {
public static void main (String[] args) {
HashMap<Integer, Integer> map = new HashMap<>();
long sq = 16;
int v = 8, u = 2;
int ans = 0;
map.put(u, map.getOrDefault(u, 0) 1);
ans = map.getOrDefault(sq/v, 0);
System.out.println(ans);
}
}
Ответ должен быть явно 1, но он выводит 0.
Есть идеи, почему он так себя ведет?
Или я что-то упускаю?
Ответ №1:
sq/v
делится long
на int
, поэтому результатом является a long
, который вставляется в Long
при передаче в map.getOrDefault(sq/v,0)
. У вас нет Long
ключей в вашем Map
, поэтому он возвращает значение по умолчанию 0
.
Если вы измените sq
на int
, результат sq/v
также будет int
, и map.getOrDefault(sq/v,0)
вернет 1.
Ответ №2:
Карта хочет ввести java.lang.Целое число как ключ
Измените на это:
ans = map.getOrDefault(Integer.valueOf((int) (sq/v)), 0);
Примечание: примитивный тип данных int также будет работать.
Это также будет работать:
ans = map.getOrDefault((int) (sq/v), 0);