В вашем коде много проблем:
- Вы никогда не должны закрывать
Scanner
для System.in
; в противном случае System.in
также будет закрыт, и нет возможности открыть его снова. Это означает, что если вы снова попытаетесь сканировать что-либо из System.in
, ваша программа завершится неудачно. - В следующем коде вы выполнили операцию над
myMap
, а затем проверили, соответствует ли это null
который никогда не будет достигнут, если myMap
равно null
.
Integer count = myMap.get(next);
if (myMap != null) {
//...
}
Примечания:
Вы всегда должны отображать какое-либо сообщение перед любым вводом, чтобы пользователь мог знать, какой вводится ожидаемый.
Вы можете упростить populateHashMap
следующим образом:
public void populateHashMap() {
Scanner input = new Scanner(System.in);
System.out.print("Enter the words: ");
String line = input.nextLine();
for (String next : line.split("\\s+")) {
myMap.put(next, myMap.getOrDefault(next, 0) + 1);
}
}
Нет причин, по которым вам следует звонить populateHashMap()
из displayCollection()
.
Метод displayCollection()
также можно упростить следующим образом:
public void displayCollection() {
for (Entry<String, Integer> entry : myMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
Ниже приведен код, включающий все эти комментарии:
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
public class Utilities {
private HashMap<String, Integer> myMap;
public Utilities() {
myMap = new HashMap<String, Integer>();
}
public void populateHashMap() {
Scanner input = new Scanner(System.in);
System.out.print("Enter the words separated by space: ");
String line = input.nextLine();
for (String next : line.split("\\s+")) {
myMap.put(next, myMap.getOrDefault(next, 0) + 1);
}
}
public void displayCollection() {
for (Entry<String, Integer> entry : myMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
public static void main(String[] args) {
Utilities demo = new Utilities();
demo.populateHashMap();
demo.displayCollection();
}
}
Пробный запуск:
Enter the words separated by space: hello hi bye hello bye
Key: hi, Value: 1
Key: hello, Value: 2
Key: bye, Value: 2