2 sinat 33003361 sinat_33003361 于 2016.05.06 20:28 提问

我在做后缀表达式时,遇到空指针问题,有高手看下吗

直接代码

 package work;

public class Fun {
    public boolean isOperator(char c){
        if('+'==c||'-'==c||'*'==c||'/'==c||'^'==c||'%'==c){
            return true;
        }else
            return false;
    }

    public boolean isOpenParenthesis(char c){
        return '('==c;
    }

    public boolean isCloseParenthesis(char c){
        return ')'==c;
    }

    public int priority(char c){
        if(c=='^')return 3;
        if('*'==c||'/'==c||'%'==c)return 2;
        else if ('+'==c||'-'==c)return 1;
        else return 0;
    }

    public String converToPostfix(String expression)throws Exception{
        LinkList st = new LinkList();
        String postfix = new String();
        for(int i = 0;i<expression.length()||expression!=null;i++){
            char c = expression.charAt(i);
            System.out.println(postfix);
            if(' '!=c){
                if(isOpenParenthesis(c)){
                    st.insert(c);
                }
                else if(isCloseParenthesis(c)){
                    char ac = (Character)st.pop();
                    while(!isOpenParenthesis(c)){
                        postfix = postfix.concat(String.valueOf(ac));
                        ac = (Character)st.pop();
                    }
                }
                else if(isOperator(c)){
                    if(!st.isEmpty()){
                        char ac = (Character)st.pop();
                        while(ac != 0 && priority(ac)>=priority(c)){
                            postfix = postfix.concat(String.valueOf(ac));
                            ac = (Character)st.pop();
                        }
                        if(ac != 0){
                            st.insert(ac);
                        }               
                    }       
                    st.insert(c);
                }
                else{
                    postfix = postfix.concat(String.valueOf(c));
                }
            }
        }
            while(st.isEmpty())
                postfix = postfix.concat(String.valueOf(st.pop()));
            return postfix;
    }

}
 package work;


public class LinkList {
    public Node head ;

    public void insert(Object date){
        Node p = new Node(date);
        p.next = head;
        head = p;
    }
    public Object pop(){
        if(isEmpty())
            return null;
        else{
            Node p = head;
            head = head.next;
            return p.date;
        }
    }

    public boolean isEmpty() {
        // TODO Auto-generated method stub
        return head==null;
    }
}
 package work;

public class Node {
    public Object date;
    public Node next;
    //�޲�
    public Node(){
        this.next = null;
    }
    //�в�
    public Node(Object date){
        this();
        this.date = date;

    }
}
 package work;

public class Example {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Fun f = new Fun();
        String postfix = f.converToPostfix("1+2+3");
        System.out.println(postfix);
    }

}

Exception in thread "main" java.lang.NullPointerException
at work.Fun.converToPostfix(Fun.java:48)
at work.Example.main(Example.java:8)
抛出这样的错误

_

2个回答

bealing
bealing   Rxr 2016.05.06 23:53
已采纳

at work.Fun.converToPostfix(Fun.java:48) ac = (Character)st.pop(); 如果st为空,那么你就不能再pop了,所以要在while的循环条件里面加上 !st.isEmpty()

CSDNXIAON
CSDNXIAON   2016.05.06 20:32

在做Android分享时遇到的一些问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
做项目过程中遇到的问题
正在进行着的一个项目,行至一半,停下记录下一些需要注意的地方。 1.梳理清即将要写的功能的逻辑,用到的技术点,用什么方式实现功能,然后再去寻找技术点的使用。 2.判空操作:controller接收前台传入的参数时、查询方法查出的对象信息等都为了避免出现java.lang.NullPointException错误,都需要在这是判断是否为空null, 对象类型判断: User user;
写测试时遇到的问题
1、测试读取数据库时,函数返回一个DataRow,DataRow的读取;public void ReadFromTable_CorrectInput_ReturnNormal() { DataRow dr = new DataTable().NewRow();//创建数据表行 dbAccessor.ReadFromTable("Tes
项目中遇到的兼容性问题
1、百度、QQ浏览器拨打电话问题 场景: 使用标签 tel:协议,一键拨打电话功能下,正对含有分机号的情况,通常是拨打分机号后需以“#”结束, App端能识别“#”,IOS、Android操作系统上的部分浏览器上不能识别“#”,将其解析成“%23”, 或者不识别“#”。 解决方案: 经查证浏览器解析该字符是会进行转码成16进制字符,经实践,将“#”字符写成“%2
HDU 1214
圆桌会议 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3625    Accepted Submission(s): 2544 Problem Description HDU ACM集训队的队员在暑假集训时经常
当程序设计遇到难题时
如果遇到的问题比较复杂而不能很快解决,那要做的第一点是让自己动起手来,千万不要守着问题发呆,一定记住,无论是做什么,一定要让自己跨出第一步,跨出第一步的方法有几个,今天来总结一下: 1.举一个例子 问题逻辑比较复杂抽象,那就用一个具体的例子来让它变得有血有肉。找一个小一点的例子,从头到尾把问题走一遍,对理清问题脉络、找到问题的难点、关键点是非常重要的。 2.将思路写下来 有时候我们既要理清
最近做网页前端项目时遇到的一些问题以及解决方案
这几天和同学一起接了老师布置的两个网页项目,虽然只做前端静态页面,但是真正实践的时候我发现有些东西还是要用一用,出点错才能记得解决方案。第一个:设置宽屏效果 当我们需要顶部的banner横向充满整个屏幕以显示宽屏效果时 我们会把这个banner的width设置为100%, 于是问题出现了,我们发现边上会有一些边距,想这样 出现这种问题我们需要在CSS的body中设置两个属性: m
数据结构——第二讲、线性结构(7)
2.2.4 堆栈应用:表达式求值 中缀表达式转换为后缀表达式: 运算数:直接输出 左括号:压栈 右括号:出栈,直到遇到左括号 运算符:遇到运算符号先入栈,直到遇到比栈顶符号优先级低的,出栈,然后该符号再和下一个栈顶元素比较,直到比栈顶高级或空栈。
做毕设的时候遇到一些问题
1、封装类和基本数据类型定义的值,值一样,类型不一样Integer bookId=5;int bid=5;bookId==bid 是false2、用jsp:include时路径问题 &amp;lt;jsp:include page=&quot;/WEB-INF/pages/admin/footer.jsp&quot;&amp;gt;&amp;lt;/jsp:include&amp;gt; 3、在jsp页面设置页面内跳转的锚点原来的写法:&amp;lt;li...
form表单提交问题
今天做form表单提交遇到了两个问题: 1.提交后不能跳转到指定页面 jsp代码 新增 type="submit" class="btn btn-primary" value="">保存 js提交事件处理: $(".btn-primary").click(function(){ $.post("url",
做毕设时遇到的一些问题,以及一些小技巧
第一次独立做一个JSP的网站,遇到很多问题。。。弱弱的1.         Myeclipse中js文件无法保存,提示"iso-8859-1"编码错误。     找到"General"--"Content Types",右边有个树形的text,展开找到"JSP",最底下有个"Default encoding",里面默认的是"ISO-8859-1",终于找到了,删掉"ISO-8859-1"填上"UT