[英]Someone please explain this to me
有人请帮忙,我究竟怎样才能把一根绳子把它均匀地分开。
例如 (41-25) 我怎样才能把 41 或 25 拉出来,而不是得到一个单独的 4 和 1。每当我输入一个双数时,它会将它注册为每个单个数字,包括句点,但不是一个整体。
static double evaluate(String expr){
//Add code below
Stack<String> operators = new Stack<String>();
Stack<Double> values = new Stack<Double>();
String[] temp = expr.split("");
Double value = 0.0;
for(int i=0; i< temp.length;i++){
if(temp[i].equals("(")) continue;
else if(temp[i].equals("+")) operators.push(temp[i]);
else if(temp[i].equals("-")) operators.push(temp[i]);
else if(temp[i].equals("*")) operators.push(temp[i]);
else if(temp[i].equals("/")) operators.push(temp[i]);
else if(temp[i].equals(")")) {
String ops = operators.pop();
value = values.pop();
value = operate(values.pop(), value, ops);
System.out.println(value);
values.push(value);
}
else{
System.out.println(temp[i]);
Double current = Double.parseDouble(temp[i]);
values.push(current);
}
}
return 0;
}
我会在任何运算符之前和之后拆分字符串,而不是拆分每个字符:
static double evaluate(String expr){
//Add code below
...
String[] temp = expr.split("((?<=[\+\-\*\/])|(?=[\+\-\*\/]))"); // Changes "41-25" to ["41", "-", "25"]
这使用正则表达式来拆分字符串,使用正向后视(?<=)
和正向前瞻(?=)
并在内部为您需要的四个运算符设置字符集[\\+\\-\\*\\/]
(运算符用反斜杠转义。
任何字符串都将在任何运算符之前和之后拆分。 如果需要更多运算符,可以将它们添加到字符集中。
使用 Java,您甚至可以通过以下方式将字符集设置为 String 以删除重复代码:
String operators = "\\+-\\*/";
String[] temp = expr.split("((?<=[" + operators + "])|(?=[" + operators + "]))";
此方法使您可以轻松更改要拆分的运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.