java堆栈下溢

java堆栈下溢,java,stack,underflow,Java,Stack,Underflow,我正在处理这个任务,并且线程中不断出现异常 “main”java.lang.RuntimeException:Stack.pop处的堆栈下溢(Postfix.java:74) 位于Postfix.eval(Postfix.java:221)和Postfix.main(Postfix.java:112) 我不知道为什么我看了一下堆栈并把它写对了,我看不出为什么当(3*4)/5时它会弹出的问题 import java.io.IOException; 类字符堆栈 { 私有最终整数堆栈大小=80; 私人

我正在处理这个任务,并且线程中不断出现异常 “main”java.lang.RuntimeException:Stack.pop处的堆栈下溢(Postfix.java:74) 位于Postfix.eval(Postfix.java:221)和Postfix.main(Postfix.java:112)

我不知道为什么我看了一下堆栈并把它写对了,我看不出为什么当(3*4)/5时它会弹出的问题

import java.io.IOException;
类字符堆栈
{
私有最终整数堆栈大小=80;
私人int top;
私人物品;
公共字符堆栈(){
items=新字符[STACKSIZE];
top=-1;
}
公共布尔空(){
如果(顶部==-1){
返回true;
}
返回false;
}
公共字符pop(){
if(空()){
抛出新的运行时异常(“堆栈下溢”);
}
返回项目[顶部--];
}
公共无效推送(字符符号)
{
if(top==堆栈大小-1){
抛出新的运行时异常(“堆栈溢出”);
}
项目[++顶部]=符号;
}
公共字符peek(){
if(空()){
抛出新的运行时异常(“堆栈下溢”);
}
返回项目[顶部];
}
}
类堆栈{
私有最终整数堆栈大小=80;
私人int top;
私人双[]项目;
公共堆栈(){
项目=新的双[堆叠大小];
top=-1;
}
公共无效推送(双x)
{
if(top==堆栈大小-1){
抛出新的运行时异常(“堆栈溢出”);
}
项目[++顶部]=x;
}
公共双pop(){
if(空()){
系统输出打印(顶部);
抛出新的运行时异常(“堆栈下溢”);
}
返回项目[顶部--];
}
公共双峰{
if(空()){
抛出新的运行时异常(“堆栈下溢”);
}
返回项目[顶部];
}
布尔空()
{
如果(顶部==-1){
返回true;
}
返回false;
}
}
公共类后缀{
公共最终静态int MAXCOLS=80;
公共静态void main(字符串[]args)引发IOException{
字符串中缀,pfix;
System.out.println(“输入中缀字符串:”);
中缀=readString().trim();
System.out.println(“原始中缀表达式为:“+infix”);
pfix=后缀(中缀);
System.out.println(“后缀表达式为:“+pfix”);
System.out.println(“值为:”+eval(pfix));
}//末端总管
公共静态布尔等标量(char x)
{
如果(x=='+')
{
返回false;
}
else如果(x='-')
{
返回false;
}
else如果(x=='*')
{
返回false;
}
else如果(x=='/'))
{
返回false;
}
如果(x='$'),则为else
{
返回false;
}
返回true;
}
公共静态整型操作优先级(字符操作)
{
if(oper=='+'| | oper=='-')
{
返回1;
}
else if(oper=='*'| | oper=='/'))
{
返回2;
}
else if(oper=='$')
{
返回3;
}
返回0;
}
公共静态布尔优先级(字符顶端,字符符号)
{
if((top!='('| | top!='))&&symb=='(')
{
返回false;
}
if(top='('&&(symb!='('| | symb!='))
{
返回false;
}
else if((top!='(“| | top!=')”)和&symb='))
{
返回true;
}
int opcode1,opcode2;
opcode1=操作优先级(顶部);
opcode2=操作优先级(symb);
如果(opcode1>=opcode2){
返回true;
}
返回false;
}
公共静态字符串readString()引发IOException{
char[]charArray=新字符[80];
int位置=0;
字符c;
而((c=(char)System.in.read())!='\n'){
charArray[position++]=c;
}
return String.copyValueOf(charArray,0,position);//将字符数组转换为字符串,从0到position-1之间开始
}//结束读取字符串
公共静态双值(字符串中缀){
字符c;
内部位置;
双opnd1,opnd2,值;
Stack optndstk=新堆栈();
对于(位置=0;位置
else if (x == '(')
{
    return true;
}
else if (x == ')')
{
    return true;
}
Exception in thread "main" java.lang.RuntimeException: Stack Underflow
    at Stack.pop(Postfix.java:74)
    at Postfix.eval(Postfix.java:221)
    at Postfix.main(Postfix.java:112)