使用堆栈声明编译错误

时间:2014-02-23 14:37:02

标签: java variables compiler-errors stack calculator

所以我是java的新手,我正在尝试用一些典型的错误控件制作一个计算器,但我似乎无法让它工作,我有点卡住了。我真的很感激有什么帮助导致崩溃。编译器给了我这个

Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at ergasia.ioanna.ErgasiaIoanna.check(ErgasiaIoanna.java:38)
at ergasia.ioanna.ErgasiaIoanna.main(ErgasiaIoanna.java:101)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

package ergasia.ioanna;

import java.util.*;
import java.io.*;

public class ErgasiaIoanna {

    static void praksi(Stack telestes,Stack arithmoi){
    double res;
    Character temp = (Character) telestes.pop();
    Double ar2 = (Double) arithmoi.pop();
    Double ar1 = (Double) arithmoi.pop();
    if(temp=='+'){
        res=ar1+ar2;
    }
     if(temp=='-'){
        res=ar1-ar2;
    }
     if(temp=='*'){
        res=ar1*ar2;
    }
     if(temp=='/'){
        if(ar2==0){
            System.out.println("error");
        }
        else{
            res=ar1/ar2;
        }
    }
     if(temp=='^'){
        res=Math.pow(ar1,ar2);
    }
        arithmoi.push( new Double (res) );

    }
    static void check(char i,Stack telestes,Stack arithmoi){
        int error=0;
        char cha = (Character) telestes.peek();
        double ar = (Double) arithmoi.peek();
        if(i==')'){
           if(telestes.empty() || cha=='('){
               System.out.println("error");
               error=1;
           }
           do{
               praksi(telestes,arithmoi);
               cha=(char) telestes.peek();
               if(telestes.empty()){
                 System.out.println("error");
                 cha='(';
               }
           }while(cha!='(');
        }
        if(i=='='){
            while(!telestes.empty()){
                praksi(telestes,arithmoi);
                cha = (Character) telestes.peek();
            }
           System.out.print(arithmoi.pop());
        }
        if(i=='+' || i=='-'){
            if(!telestes.empty() || cha!='('){
                praksi(telestes,arithmoi);
                telestes.push(i);
            }
            else{
               telestes.push(i);
            }
        }
        if(i=='*' || i=='/'){
            if(cha=='^'){
             praksi(telestes,arithmoi);
               telestes.push(i);  
            }
            else{
                telestes.push(i);
            }
        }
        if(i=='^'){
            if(!telestes.empty() || cha!='('){
                praksi(telestes,arithmoi);
                telestes.push(i);
        }
        else{
            telestes.push(i);
        }

    }
    }



    public static void main(String[] args)throws IOException {
        Stack Tel = new Stack();
        Stack Ar = new Stack();
        char c;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        do {
         c = (char) br.read();
         check(c,Tel,Ar);
      } while(c != 's');
    }
}

1 个答案:

答案 0 :(得分:0)

异常java.util.EmptyStackException表示您正尝试在空堆栈上执行操作,在本例中为peek。在main方法中,您声明了两个Stack s TelAr。两者都是空的。然后,您将这些空堆栈传递给check方法,该方法尝试peek第一个元素,即获得EmptyStackException时。