繁体   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