gpt4 book ai didi

Java iterate/foreach 包含 hashmap/map 的 ArrayList

转载 作者:行者123 更新时间:2023-12-01 13:18:41 24 4
gpt4 key购买 nike

对于一项作业,我遇到了一个问题。为了给您带来一点动力,我会告诉您我正在做什么。

作业要求我创建一个 java 小程序(即使我使用的是 JFrame ,哎呀),它以一段文本的形式从用户那里获取输入。通过此文本,程序将计算每个长度的单词有多少个,并在单独的窗口中以图表的形式显示结果。我的 HashMap 包含两个 Integer s,单词的长度以及该长度有多少个。

但是,该作业要求用户能够上传两个文本文件并比较结果,因此我必须发送一个 HashMap 数组,每个 HashMap 都有单独的结果到窗口。我一直这样做:

public void dispatchNewGraph (ArrayList<Map<Integer, Integer>> sortedCount) {
TextAnalyserGraph graphFrame = new TextAnalyserGraph(sortedCount);
}

在打开的窗口中,传递给构造函数的数据将应用于 TextAnalyserGraph 类 private ArrayList<Map<Integer, Integer>> graphData; 中的此属性。

我的问题是我得到了 nullpointerexception当我尝试使用以下代码迭代此 HashMap 数组时出错:

for(Iterator<Map<Integer, Integer>> i = graphData.iterator(); i.hasNext(); ) {
Map<Integer, Integer> graph = i.next();
for (Integer value : graph.keySet()) {
if(graph.containsKey(value)) {
Integer v = graph.get(value);
if (v.intValue() > largest)
largest = v.intValue();
}
bars++;
}
}

错误从最后一个代码块的第一行开始。如果我将 graphData 移动到下一行,则会出现相同的错误,表明 graphData 存在问题。,我真的很难在这方面取得进展!

非常感谢! :)

堆栈跟踪

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at TextAnalyserGraph.paint(TextAnalyserGraph.java:47)
at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

最佳答案

在循环之前,您需要对 graphData 进行空检查。

我还建议将 for 循环修改得更好一点。

如果您关心按键,可以使用它:

        if(graphData != null){
for(Map<Integer, Integer> valueMap : graphData){
for (Map.Entry<Integer, Integer> entry : valueMap.entrySet()) {
if (entry.getValue() > largest)
largest = entry.getValue();
bars++;
}
}
}

但是由于您不关心 key 并且它曾经在循环逻辑中使用过,所以我建议:

    if(graphData != null){
for(Map<Integer, Integer> valueMap : graphData){
for (Integer value : valueMap.values()) {
if (value > largest)
largest = value;
bars++;
}
}
}

关于Java iterate/foreach 包含 hashmap/map<Int, Int> 的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com