簡體   English   中英

有人請向我解釋這個

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM