gpt4 book ai didi

java - 使用 Java 获取空指针异常

转载 作者:行者123 更新时间:2023-11-30 08:15:16 25 4
gpt4 key购买 nike

我在 Java 中的 Iterator 的帮助下编写了一个程序来创建堆栈。但我不明白为什么会出现空指针异常。

这是我的堆栈类

import java.util.Iterator;

public class linkedStack1<Item> implements Iterable<Item>
{

public Iterator<Item> iterator()
{
return new listIterator();
}

private class listIterator implements Iterator<Item>
{
private node current = first;
public boolean hasNext() { return current!=null;}
public Item next()
{
Item item = current.item;
current=current.next;
return item;
}

}

private node first=null;

private class node
{
Item item;
node next;
}

public boolean isEmpty()
{
return first==null;
}

public void push(Item item)
{
node oldFirst=first;
first=new node();
first.item=item;
first.next=oldFirst;
}

public Item pop()
{
Item item=first.item; // ERROR SHOWING HERE
first=first.next;
return item;
}}

我的主课是这个

import java.util.Scanner;

public class evaluate
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
String s=input.nextLine();

linkedStack1<String> ops = new linkedStack1<String>();
linkedStack1<Double> vals = new linkedStack1<Double>();


String op;
double a,b;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)=='(');
else if(s.charAt(i)=='+' || s.charAt(i)=='*'
|| s.charAt(i)=='-' || s.charAt(i)=='/')
ops.push(Character.toString(s.charAt(i)));
else if(s.charAt(i)==')')
{
op =ops.pop();
a=vals.pop();
b= vals.pop(); // ERROR SHOWING HERE
if(op=="+") vals.push(b+a);
else if(op=="-") vals.push(b-a);
else if(op=="*") vals.push(b*a);
else if(op=="/") vals.push(b/a);
}
else if(s.charAt(i)==' ')
continue;
else
vals.push(Double.parseDouble(Character.toString(s.charAt(i)) ));


}


System.out.println(vals.pop());

}
}

但是当我为某些输入执行此代码时,比如 (1+(2*3)),我得到空指针异常

Exception in thread "main" java.lang.NullPointerException
at linkedStack1.pop(linkedStack1.java:47)
at evaluate.main(evaluate.java:25)

我已经在指定的行号前面做了注释,大家可以看看,并帮助我找出我的代码中的错误是什么!!

最佳答案

当您的堆栈为空并且您调用 pop 时,first.item 会抛出一个 NullPointerException 因为 first 是空。

这意味着您要弹出的元素多于堆栈中存在的元素:

        a=vals.pop();
b= vals.pop(); // ERROR SHOWING HERE

在调用pop之前,你应该检查栈是否为空。

关于java - 使用 Java 获取空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28943293/

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