2014-02-23 91 views
0

所以我是新来的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'); 
    } 
} 
+0

这不是编译错误。这是您程序的运行时错误。添加一些调试打印或通过调试器运行你的程序来找出错误。 –

回答

0

例外java.util.EmptyStackException意味着你在一个空栈上尝试的操作,在这种情况下peek。在您的main方法中,您声明了两个Stack s TelAr。它们都是空的。然后,您将这些空堆栈传递给您的check方法,该方法尝试在peek的第一个元素处,即您获得EmptyStackException时。