gpt4 book ai didi

java - 计算逆波兰表示法中算术表达式的值

转载 作者:行者123 更新时间:2023-12-01 17:43:39 25 4
gpt4 key购买 nike

我们给出了字符串数组,其中包含后缀表达式作为其元素,我们需要进行评估

我尝试使用堆栈但遇到异常:线程“main”中的异常 java.util.EmptyStackException

public int evalRPN(String[] A) {

Stack<Integer> s=new Stack<>();
int i=0;
while(s.isEmpty()==false && i<A.length)
{
String p=A[i++];
if(p.matches("\\d"))
s.push(Integer.parseInt(p));
else
{
int a=s.pop();
int b=s.pop();

switch(p)
{
case "+": s.push(b+a);break;
case "-": s.push(b-a);break;
case "*": s.push(b*a);break;
case "/": s.push(b/a);break;


}
}

}
return s.pop();
}

最佳答案

public int evalRPN(String[] A) {

Stack<Integer> s=new Stack<>();
int i=0;
while(i<A.length) //stack will be empty right at the start.. no need to check this
{
String p=A[i++];
if(p.matches("\\d")) //I am not quite sure, but this just matches single digits, right? I would go for "\\d*", but I am not completely sure. Anyways you won't capture negative values or decimals.. perhaps better exclude +-*/ and use Double.parseDouble and a Stack<Double>
s.push(Integer.parseInt(p));
else
{
int a=s.pop();
int b=s.pop();

switch(p)
{
case "+": s.push(b+a);break;
case "-": s.push(b-a);break;
case "*": s.push(b*a);break;
case "/": s.push(b/a);break;


}
}

}
return s.pop();
}

如果给定的表达式不正确(运算符太多/操作数太少),这可能会遇到错误,或者可能只返回中间结果(操作数太多/运算符太少)。

关于java - 计算逆波兰表示法中算术表达式的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com