Есть задача на Java (пока под консоль): Пользователю предлагается вводить числа в диапазоне от 1 до 100 до тех пор, пока не надоест. Когда пользователь выходит из программы, он видит на экране сумму одинаковых чисел.
Например:
1 нажато 10 раз
17 нажато 35 раз
63 нажато 12 раз
и т.д.
Как это реализовать? Как запомнить и вывести сумму?
Создайте класс обертку для HashMap с методом add(int number)
public class SumMap {
private Map<Integer, Integer> hashMap = new HashMap<>();
public void add(int number) {
if (hashMap.containsKey(number)) {
hashMap.put(number, hashMap.get(number) + 1);
} else {
hashMap.put(number, 1);
}
}
public Map<Integer, Integer> getMap() {
return hashMap;
}
public static void main(String[] args) {
SumMap sumMap = new SumMap();
sumMap.add(1);
sumMap.add(2);
sumMap.add(1);
sumMap.add(1);
sumMap.add(1);
sumMap.add(2);
sumMap.add(2);
for (Map.Entry<Integer, Integer> entry : sumMap.getMap().entrySet()) {
System.out.println("Number=" + entry.getKey() + ", Amount=" + entry.getValue());
}
}
}
Более элегантный add. Не такой простой на первый взгляд. Но если понять, то намного более красивый
public Integer add(int number) {
return hashMap.put(number, hashMap.getOrDefault(number, 0) + 1);
}
У меня получилось такое решение:
final Map<String, Integer> counts = new HashMap<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line;
while (!"exit".equals(line = reader.readLine())) {
Integer count = counts.getOrDefault(line, 0);
counts.put(line, count + 1);
}
counts.forEach((key, value) -> System.out.println(String.format("%s нажато %s раз", key, value)));
Создаем HashMap<Integer, Integer>
- ключом будет число, значением - количество его нажатий. При каждом вводе числа проверять было ли оно уже введено, если да - то берем количество вводов, если нет - то ноль. Далее вставляем в HashMap
пару с ключом и увеличенным на 1 прежним значением.
HashMap<Integer, Integer> data = new HashMap<>();
int num = // просим ввести число, получаем его
int val = data.containsKey(num) ? data.get(num) : 0;
data.put(num, val + 1);
При выходе выводим информацию:
for (int num : data.keySet()) {
int val = data.get(num);
System.out.println(num + " нажато " + val + " раз.");
}
Чтобы ключи выводились от меньшего числа к большему, а не вразноброс, можно использовать TreeMap
вместо HashMap
- он посмотрит на тип ключа - Integer
в котором уже предусмотрен компаратор и будет сортировать пары по ключам.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Для чего эти аннотации, и какие плюсы и минусы AccessTypeFIELD и AccessType
Не знаю при каких условиях, но иногда перестает работать мой сервис по отлову уведомленийВот код:
Прочитал о изменениях в java и немного испугалсяОдно из нововведений будет удаление JavaFX, как я понял удаление полное