簡體   English   中英

從前綴到中綴的轉換:空指針異常

[英]Conversion from prefix to infix: Null Pointer exception

我正在嘗試將表達式從中綴轉換為后綴。 我嘗試調試代碼,但是當彈出變量時,我不斷收到空指針異常。 我得到錯誤的輸入是:

(=>(不(獎勵))(不良))

得到錯誤后的輸出是(未授予)

請告訴我是否需要編輯Q以發布更少的代碼/添加更多注釋/提供更多信息。 謝謝!

public class toInfix1 {

Stack<String> symbol = new Stack<String>();
Stack<String> variable = new Stack<String>();
Stack<String> operator = new Stack<String>();
static String inputfile = "kb2.txt";
ArrayList<String> infix = new ArrayList<String>();

public void toPrefix1() {
    try {
        File f = new File(inputfile);
        FileReader fr = new FileReader(f);
        BufferedReader bf = new BufferedReader(fr);
        String str;
        String kb = "";

        while ((str = bf.readLine()) != null) {
            Pattern pattern = Pattern.compile("[(]|[)]|<=>|=>|\\w+|^\\s+");
            Matcher m = pattern.matcher(str);
            //int a = 0;
            System.out.println("KB" + kb);
            while (m.find()) {
                String node1 = m.group();
                System.out.println("Node1" + node1);

                //If  (
                if (node1.equals("(")) {
                    symbol.push(node1);

                } else if (node1.equals("OR") || node1.equals("AND")
                        || node1.equals("NOT") || node1.equals("=>")
                        || node1.equals("<=>")) {
                    operator.push(node1);

                    //If )
                } else if (node1.equals(")")) {
                    //Pop symbol (

                    if(!variable.empty()&& !operator.empty() && !symbol.empty()){

                        String symbol1 = "", op = "";
                        if (symbol.peek() != null && !symbol.empty()) {
                            symbol1 = symbol.pop();
                        }
                        //Pop if  operator AND OR => <=> (Binary)
                        if (operator.peek() != null && !operator.empty()) {
                            op = operator.pop();
                            if (op.equals("AND") || op.equals("OR")
                                    || op.equals("=>") || op.equals("<=>")) {
                                String var2 = "";
                                String var1 = "";
                                if (variable.peek() != null && !variable.empty()) {
                                    var1 = variable.pop();
                                }//Error occurs in the following if condition 
                                if (variable.peek() != null && !variable.empty()) {
                                    var2 = variable.pop();
                                }
                                kb = "(" + var1 + op + var2 + ")";
                                variable.push(kb);
                                //Pop if operator NOT   (Unary)
                            } else if (op.equals("NOT")) {
                                String var1 = "";
                                if (variable.peek() != null && !variable.empty()) {
                                    var1 = variable.pop();
                                }
                                kb = "(" + op + var1 + ")";
                                variable.push(kb);
                                //No operator after popping )
                            } 
                        } 
                    }                   
                    //If there are no operators
                }   else {

                    variable.push(node1);
                }
            }
        }   
        fr.close();

    } catch (Exception e) {
        System.err.println("Error thrown" + e.getMessage());
    }
}

public static void main(String[] args) {
    System.out.println("In new file");
    toInfix1 inf1 =  new toInfix1();
    inf1.toPrefix1();
    System.out.println("Completed");
}

}

我試圖訪問一個在variable.peek()中為null的元素。 刪除所有偷看條件,將使程序正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM