В чем причина того, что код не запускается? - PullRequest
0 голосов
/ 07 мая 2020

Я новичок и попробовал несколько способов, отличных от того, что я узнал из вопросов других людей, но все равно не могу запустить свой код.

 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 (), метод будет отображать каждый ключ и количество раз, когда он встречается в данном тексте.

Если кто-нибудь может сказать мне, почему я не могу запустить это в код, я был бы признателен.

1 Ответ

1 голос
/ 07 мая 2020

В вашем коде много проблем:

  1. Вы никогда не должны закрывать Scanner для System.in; в противном случае System.in также будет закрыт, и нет возможности открыть его снова. Это означает, что если вы снова попытаетесь сканировать что-либо из System.in, ваша программа завершится неудачно.
  2. В следующем коде вы выполнили операцию над 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
...