PTA题目,Java代码实现后缀式求值,写的代码出异常,调试发现测试给的第二个小数没有进栈,不知道原因,直接复制站内参考的那份代码虽然没有异常但似乎也没有读取到小数,求解答,测试样例:3 5.4 2.2 * +
package zuoye3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class homework11 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[] s1=br.readLine().split(" ");
List<String> l=new ArrayList<String>();
for(String ss:s1){
l.add(ss);
}
double r=cal(l);
System.out.println(r);
}
public static double cal(List<String> l)
{
Stack<String> stack=new Stack<String>();
//读取数据
for(String s:l)
{
if(s.matches("\\d+"))
{
stack.push(s);
}
else {
//若匹配的数字就入栈
double n2 = Double.parseDouble(stack.pop());
double n1 = Double.parseDouble(stack.pop());
double result=0;
switch (s){
case "+":
result=n1+n2;
break;
case "-":
result=n1-n2;
break;
case "*":
result=n1*n2;
break;
case "/":
result=n1/n2;
break;
default:
break;
}
stack.push("" + result);
}
}
return Double.parseDouble(stack.pop());
}
}
if(s.matches("\\d+"))
{
stack.push(s);
}
这里判断是纯数字,不含小数,所以没有入栈。把正则表达式换成"\\d+(\.\\d+)?"
试试