所以我是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 Tel
和Ar
。两者都是空的。然后,您将这些空堆栈传递给check
方法,该方法尝试peek
第一个元素,即获得EmptyStackException
时。