代码不能运行的原因是什么?

我是一个初学者,我从别人的问题中学到的东西,尝试了一些不同的方法,但还是不能让我的代码运行。

 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();

 }
}

我应该创建以下方法。

  • A 方法 populateHashMap(), 该方法将使用扫描器从用户那里获取一段文字. 每个单词将被用作一个键,整数将是该单词在文本中出现的次数。

  • 一个方法displayCollection(),该方法将显示每个键和它在给定文本中出现的次数。

如果有人能告诉我为什么我不能让这个代码运行,我将感激不尽。

解决方案:

你的代码有很多问题。

  1. 你不应该关闭 Scanner 对于 System.in;否则。System.in 也将被关闭,无法再次打开。这意味着,如果你试图再次扫描任何东西,从 System.in,你的程序将失败。
  2. 在下面的代码中,你已经执行了对 myMap 然后你已经检查了它是否是 null 岂不至于 myMapnull.
Integer count = myMap.get(next);
if (myMap != null) {
    //...
}

侧面说明。

  1. 你应该在任何输入之前总是显示一些信息,这样用户就可以知道什么是预期的输入。

  2. 你可以简化 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);
    }
}
  1. 你没有理由打电话给 populateHashMap()displayCollection().

  2. 该方法: 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

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何垂直打印或显示一个Python Numpy数组矩阵。

2022-10-13 3:51:22

未分类

试图渲染从elastic-search收到的JSON dict,但得到[object Promise]错误。

2022-10-13 4:02:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索