我正在努力解决这个错误。我觉得它很简单但不明白为什么会出错。
当我遍历链表中的值时,我不断获得NullPointerException
。
代码段:
private void updateBuyBook(LimitOrder im) {
LimitOrder lm = null;
Iterator itr = buyBook.entrySet().iterator();
boolean modify = false;
while (itr.hasNext() && !modify) {
Map.Entry pairs = (Map.Entry) itr.next();
if ((((LinkedList<IMessage>) pairs.getValue()).size() > 0)) {
LinkedList<ILimitOrder> orders = (LinkedList<ILimitOrder>) pairs
.getValue();
ListIterator listIterator = orders.listIterator();
while (listIterator.hasNext() && !modify) {
LimitOrder order = (LimitOrder) listIterator.next();
if (order.getOrderID().equalsIgnoreCase(im.getOrderID())) { // error at this line
lm = order;
addToBuyMap(im);
modify = true;
break;
}
}
if (modify = true) {
orders.remove(lm);
break;
}
}
}
}
错误就在这一行:
Exception in thread "main" java.lang.NullPointerException
order.getOrderID().equalsIgnoreCase(im.getOrderID()));
请帮忙。我的作业是否有任何错误? 请帮忙!!! 感谢
答案 0 :(得分:0)
我的猜测是你传入 null,进入im。我需要查看更多代码才能确定。
答案 1 :(得分:0)
您永远不会检查im
是否为空。我怀疑是。
答案 2 :(得分:0)
首先看一下,im
在哪里实例化?您还可以尝试在IDE中进行调试,以便了解最新情况?
答案 3 :(得分:0)
看起来没有宣布/分配。所以
im.getOrderID()
可能是生成空指针异常的地方。
- 丹
编辑:
错过了im作为参数传递。因此留下了一些可能性(按可能性顺序):
EDIT2:
你的行
if (modify = true)
基本上是错误的,并且总是评估为真(单个等于分配,==用于比较。)
当简单地检查标志布尔值是真还是假时,最好使用:
boolean flag = true;
if(flag)
{
// True block
}
else
{
// False block
}
答案 4 :(得分:0)
im为null或order.getOrderID()返回null。
答案 5 :(得分:0)
如果您可以在该行之前添加调试点并查看哪个变量为null,那将是一件好事。看代码答案是1. order是null 2. order.getOrderID()是null或3. im是null
答案 6 :(得分:0)
稍微更改代码会使代码更长,但更容易找到错误...而不是执行:
if (order.getOrderID().equalsIgnoreCase(im.getOrderID())) {
将其更改为:
String orderID = order.getOrderID();
String imOrderID = im.getOrderID();
if(orderID.equals(imOrderID()) {
然后您将知道order
或im
是否为空。如果这些都不为null,则可能为null的内容为orderID
和imOrderID
。现在很容易找出哪一个是空的。
如果是订单或即时消息,则程序将在order.getOrderID()
或im.getOrderID()
行崩溃。
如果orderID
或imOrderID
为空,则会在if(orderID.equals(imOrderID()) {
上崩溃。然后,您可以使用System.out.println(或者更好的东西,比如调试器)轻松找出问题所在。
如果这些都不为null,那么我建议添加如下内容:
if(orderID == null) { throw new IllegalStateException("orderID cannot be null"); }
if(imOrderID == null) { throw new IllegalStateException("imOrderID cannot be null"); }
然后跟踪它如何设置为null开始。