【问题标题】:Program saves 'null' or didnt save information in HashMap程序在 HashMap 中保存“null”或未保存信息
【发布时间】:2019-11-06 14:24:09
【问题描述】:

我需要使用 HashMap 制作某种电话簿。

  • 如果我输入一个数字,程序必须要求输入相应的名称并将其保存为键和值
  • 如果我输入姓名,那么我也必须输入数字。

数字是键,名称是值。

else if (isPhone(input)) {
    if (phoneBook.containsKey(input)) {
        System.out.println("This number reserve by => " + phoneBook.get(input));
    } else {
        System.out.println("Enter number's owner: " + input);
        String name = scanner.nextLine();
        if (isName(name)) {
            System.out.println("Accept!");
            phoneBook.put(input, name);

嗯,它保存了密钥,但没有保存值。

Link to full code at GitHub

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow!请记住,这不是免费的代码编写服务,您需要向我们展示您迄今为止所做的尝试。请edit 您的帖子添加minimal reproducible exampleShort, Self Contained, Correct Example 或至少向我们展示您到目前为止所尝试的内容。此外,请阅读How to ask,这是关于有效地在 Stack Overflow 上提问的指南,以便其他用户可以更快更好地帮助您。
  • 请注意,在 Stack Overflow 上从外部链接到代码并不是一个好的做法。您应该在问题中发布所有相关代码。由于您是新来的,请阅读我提供的链接,然后阅读edit您的问题。谢谢。
  • 您的代码很难阅读。它充满了 if/else 语句。可能您应该首先以某种方式简化该代码。在代码中出现这样的错误是很正常的。

标签: java dictionary


【解决方案1】:

就像你自己说的:数字是关键,名字是价值。但是您试图在这里为 get 方法提供一个名称作为参数:

if (phoneBook.containsValue(input)){
    System.out.println("This person own number => " + phoneBook.get(input));
}

存储和检索数字和名称的一种有效方法是拥有两个 HashMap。一个以电话号码为键,另一个以姓名为键。

【讨论】:

    【解决方案2】:

    代码中的第 44 行 System.out.println("This person own number => " + phoneBook.get(input)); 错了。

    这将尝试通过 value 获取 map 条目,并且 this 为 null。

    对于 Java 8 使用 Set set = phoneBook.entrySet().stream().filter(entry -> Objects.equals(entry.getValue(), input)).map(Map.Entry::getKey).collect(Collectors.toSet()); System.out.println("This person own number => " + set.toArray()[0]); 例如。

    其他选项可以找到here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多