[英]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.