add/subtract/or 根据给定的字符串相乘

add/subtract/or multiply as per the given string

我在面试中遇到了这个问题,return 这个String s = "4+8×2" 的输出,output = 20, Ex2: String s = "3×7-4" ,输出 = 17。 这是我的做法,但没有得到预期的结果,请在这里指出正确的方法。

 public static int findResult (String s) {
        int i = 0;
        Stack<String> stack =  new Stack<>();
        while (i < s.length()) {
            if (s.charAt(i) == '+') {
                stack.push(String.valueOf(s.charAt(i)));
                i++;
            } else if (s.charAt(i) == '*') {
                stack.push(String.valueOf(s.charAt(i)));
                i++;
            } else if (s.charAt(i) == '-') {
                stack.push(String.valueOf(s.charAt(i)));
                i++;
            } else if (Character.isDigit(s.charAt(i))) {
                int num = s.charAt(i) - '0';
                while (i+1 < s.length() && Character.isDigit(s.charAt(i + 1))) {
                    num = num * 10 + s.charAt(++i) - '0';
                }
                stack.push(String.valueOf(num));
                i++;
            }
        }
        int current = 0;
        //second while loop
        while (!stack.isEmpty()) {
            int firstNumber = Integer.parseInt(stack.pop());
            if (stack.isEmpty()) return current;
            String sign = stack.pop(""
            //int firstNum = Integer.parseInt(stack.pop());
            if (sign.equals("*")) {
                current = firstNumber * Integer.parseInt(stack.pop());
                stack.push(String.valueOf(current));
            }
            else if (sign.equals("-")) {
                current = firstNumber;
                stack.push(String.valueOf(current));
            } else {
                current = firstNumber + Integer.parseInt(stack.pop());
                stack.push(String.valueOf(current));
            }
        }

        return Integer.parseInt(stack.pop());
    }

这就是我解决这个问题的方法。 (这和你的有点相似)。我会先post代码,然后在下面解释过程:

import java.util.*;
class Main {
  public static void main(String[] args) {
    System.out.println(findResult("2*57-38*3/5-5-2+3*4/2-2-2"));
  }
   public static double findResult (String s){
     String sub = s;
     ArrayList<Double> nums = new ArrayList<Double>();
     ArrayList<Character> operations = new ArrayList<Character>();
     for(int x = 0; x < s.length(); x++){
       if(s.charAt(x) == '+' || s.charAt(x) == '-' || s.charAt(x) == '*' || s.charAt(x) == '/' ){
         operations.add(s.charAt(x));
         int subInd = sub.indexOf(s.charAt(x));
         nums.add(Double.valueOf(sub.substring(0,subInd)));
         sub = sub.substring(subInd + 1);
       }
      }
     nums.add(Double.valueOf(sub));
     String[] operationTypes = {"*/","+-"};
     for(int i = 0; i < 2; i++){
         for(int j = 0; j < operations.size(); j++){
           if(operationTypes[i].indexOf(operations.get(j)) != -1){
             double val;
             if(operations.get(j) == '*'){
              val = nums.get(j) * nums.get(j+1);
             }
             else if(operations.get(j) == '/'){
              val = nums.get(j) / nums.get(j+1);
             }
             else if(operations.get(j) == '+'){
              val = nums.get(j) + nums.get(j+1);
             }
             else{
              val = nums.get(j) - nums.get(j+1);
             }
             nums.set(j,val);
             nums.remove(j+1);
             operations.remove(j);
             j--;
           }
         }
       }
    return nums.get(0);
  }
}

是啊...很多:

此过程的第一步是将字符串分成两个 ArrayListsnumsoperationsnums 存储术语,operations 存储..操作(*、/、+、-)。

现在,我们遍历每个“组”运算,即乘法和除法,以及加法和减法。

从 mult/div 开始,如果我们在 operations 中看到 '*''/',那么我们计算我们的相应元素的乘积或商nums 并相应地编辑 nums 通过修改与操作匹配的索引的元素并删除它后面的术语。确保您还从 nums 中删除操作并递减计数器变量,以便循环不会跳过任何值。

最后,我们将 return 我们 nums 中剩下的唯一值,这将是我们的答案。

希望对您有所帮助!如果您需要任何进一步的详细信息或说明,请告诉我:)