【问题标题】:Compiling error with stacks declarations使用堆栈声明编译错误
【发布时间】:2014-02-23 14:37:02
【问题描述】:

所以我是 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');
    }
}

【问题讨论】:

  • 这不是编译错误。这是来自您的程序的运行时错误。添加一些调试打印或通过调试器运行程序以找出问题所在。

标签: java variables compiler-errors stack calculator


【解决方案1】:

异常java.util.EmptyStackException 表示您正在尝试操作,在本例中peek 在空堆栈上。在您的main 方法中,您声明了两个Stacks TelAr。这两个开始都是空的。然后,您将这些空堆栈传递给您的 check 方法,该方法尝试在它们的第一个元素处使用 peek,也就是您获得 EmptyStackException 时。

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多