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

标签 java nullpointerexception

我在 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/

相关文章:

java - play框架中的类路径问题

java - 需要 Android 方向技巧

java - Spring Boot - 环境@Autowired 抛出 NullPointerException

java - 康威的生命游戏(构造器和更新游戏)

java - 什么是NullPointerException,我该如何解决?

java - 如何在 Netbeans 中从 Maven 安装 PrimeFaces?我收到警告,标签库 http ://primefaces. org/ui 不存在

java - 如何创建将添加新属性源的自定义注释

java - 在java中从ms access jdbcodbc查询数据库的正确语法是什么

java - 为 BroadcastReceiver 调用 onReceive 时出现 NullPointerException

java - BlueJ 调用公共(public)方法空指针异常(java.awt.container)