【问题标题】:Hashmap NoSuchElementException error [closed]Hashmap NoSuchElementException错误[关闭]
【发布时间】:2013-04-02 12:47:53
【问题描述】:

我在执行 printAll 时遇到了 java.util.NoSuchElementException 错误。

public class myDatabase {

    Map<String, HashSet<Integer>> mapOfSets = new HashMap<String, HashSet<Integer>>();

    void printAll() {

        if (mapOfSets.isEmpty() == false)
        {
                for (String key : mapOfSets.keySet()) 
                {
                    System.out.println(key);

                    //print the set
                    for (HashSet<Integer> id : mapOfSets.values() ) 
                        System.out.println(id);
                }
        }

}

//剩下的空代码...

来自 cmets 的更新:例外情况是

java.util.NoSuchElementException 
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:809) 
at java.util.HashMap$KeyIterator.next(HashMap.java:841) 
at StudentDatabase.report(myDatabase.java:29) 
at DatabaseRun1.main(DatabaseRun1.java:52)

【问题讨论】:

  • 哪一行抛出异常?你为什么使用mapOfSets.get(key)
  • 不是答案,而是观察。您可以使用if(boolean)。所以你也可以(并且应该)写if (!mapOfSets.isEmpty())
  • 而且你绝对不需要做那个测试 - mapOfSets.isEmpty() == false
  • 我怀疑由于您根本没有显示的代码而引发了异常。您发布的代码不能抛出此异常。
  • 根据命名约定,你的类应该命名为MyDatabase而不是myDatabase

标签: java foreach hashmap hashset


【解决方案1】:

如果我理解你想要做什么,你最好使用entrySet

for(Map.Entry<String, HashSet<Integer>> entry : mapOfSets.entrySet()) {
    String key = entry.getKey();
    HashSet<Integer> value = entry.getValue();

    // Print it
}

我看不出这段代码如何产生NoSuchElementException

【讨论】:

  • 这是真的。这不是我的函数,因为当我清空函数时,异常仍然运行。感谢您的时间
  • 我不得不创建一个新项目,然后将所有内容重新放入,现在它可以工作了。
【解决方案2】:

你应该改变:

                for (HashSet<Integer> id : mapOfSets.values() ) 
                    System.out.println(id);

      for (Integer i : mapOfSets.get(key)) {
        System.out.println(i);
      }

或者(正如@JonSkeet 指出的那样)

       System.out.println(mapOfSets.get(key));

本质上,您是在尝试打印地图而不是地图内关键位置的集合。

【讨论】:

  • 我希望HashSet 已经打印出正确的内容。只要System.out.println(mapOfSets.get(key)) 就可以了。
  • @JonSkeet - 很好的电话 - 但提问者似乎想在每个之间打印换行符 - 非常混乱。
  • 在这种情况下,我会坚持使用增强型 for 循环:for (Integer id : mapOfSets.get(key)) { System.out.println(id); } - 没有理由避免增强型 for 循环。
  • @JonSkeet - 好点 - 已修复。
猜你喜欢
  • 2017-03-05
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 2021-03-31
  • 2021-08-08
相关资源
最近更新 更多