私は初心者で、他の人の質問から学んだことからいくつかの方法を試しましたが、それでもコードを実行できません。
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
public class Utilities {
private HashMap<String,Integer> myMap;
public Utilities() {
myMap = new HashMap<String, Integer>();
}
public void populateHashMap() {
Scanner input = new Scanner(System.in);
while(input.hasNext()) {
String next = input.next();
Integer count = myMap.get(next);
if(myMap != null) {
myMap.put(next, count + 1);
}else {
myMap.put(next, 1);
}
}
input.close();
}
public void displayCollection() {
populateHashMap();
Set<Map.Entry<String, Integer>> enteries = myMap.entrySet();
for(Map.Entry<String, Integer> entery : enteries) {
System.out.print("Key: " + entery.getKey());
System.out.print(", Value" + entery.getValue());
}
}
public static void main(String[] args) {
Utilities demo = new Utilities();
demo.populateHashMap();
demo.displayCollection();
}
}
次のメソッドを作成することになっています。
メソッドpopulateHashMap()。メソッドはスキャナーを使用して、ユーザーからテキストピースを取得します。各単語はキーとして使用されます。整数は、単語がテキストに現れる回数です。
メソッドdisplayCollection()の場合、メソッドは各キーと、指定されたテキストに出現した回数を表示します。
これをコード実行できない理由を誰かに教えてもらえれば幸いです。
コードには多くの問題があります:
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加