-3

初心者なのでフォーム-4-12-2*12-3-4*5で与えられたような式をAPIを使わずに評価したい、ロジックを把握したい。String

以下は、この問題に対する私の失敗した試みです。必要に応じて、適切なロジックを無視して提案してください。もちろん、あなたのコードも大歓迎です:-)

public class SolveExpression3 {

static String testcase1 = "-4-12-2*12-3-4*5";


public static void main(String args[]){
    SolveExpression3 testInstance= new SolveExpression3();
    int result = testInstance.solve(testcase1);
    System.out.println("Result is : "+result);
}

public int solve(String str){

    int sum = 1;
    int num1 = 0;
    int num2 = 0;
    String num = "";        
    int len = str.length();
    System.out.println(str);
    for (int i = len-1 ; i >= 0; i--)
    {
        char ch = str.charAt(i);            
        if(ch == '*')
        {
            String s = "";
            num1 = num2 = 0;
            //to get the number on left of *
            for (int j = i; j >= 0; j--)
            {
                char c = str.charAt(j);                 
                if(c == '+' || c == '-' || j == 1)
                {
                    num1 = stringToInt(s);
                    s = "";
                    break;
                }
                else
                {
                    s = c + s;
                }
            }
            //to get the number on right of *
            for (int j = i; j <= len; j++)
            {
                char c = str.charAt(j);                 
                if(c == '+' || c == '-' || j == len-1)
                {
                    num2 = stringToInt(s);
                    s = "";
                    break;
                }
                else
                {
                    s = c + s;
                }
            }
            sum = sum + num1*num2;

        }
        else
        {
            num = ch + num;             
        }
    }
    len = str.length();
    for (int i = len-1; i >= 0; i--)
    {
        char ch = str.charAt(i);
        if(ch==' ')
        {}
        else if(ch=='+')
        {
            sum = sum + stringToInt(num);               
            num = "";
        }
        else if(ch=='-')
        {
            sum = sum - stringToInt(num);               
            num = "";
        }
        else
        {
            num = ch + num;             
        }
    }
    return sum;
}

public int stringToInt(String str)
{
    int number=0;
    for(int i = 0; i < str.length(); i++)
    {
        int num = str.charAt(i) - 48;
        number = number*10+num;
    }
    return number;
}

}
4

3 に答える 3

1
        found=true;
        static String testcase1 = "-4-12-2*12-3-4*5";
        Pattern SEGMENT_PATTERN = Pattern.compile("(\\d+(\\.\\d+)?|\\D+)");
        /*\\d-means digit,
        \\.-point,
        +-one or more times,
        ?-optional and 
        \\D-non digit ch*/
        Matcher matcher = SEGMENT_PATTERN.matcher(testcase1);
        while (found) {
                    boolean Found = matcher.find();
                    String segment = matcher.group();//representing a number or an operator

                        if (Character.isDigit(segment.toCharArray()[0])) {
                            //is digit
                        }
                        else {
                            //is operator

                        }
                    }

これは、パターンを使用して数値または演算子があるかどうかを判断するソリューションです。結果を計算するには、ケースに少し適応させる必要があります。

You can add all the matches found to an array list than traverse it and test the operators and computer the result.

浮動小数点数でも機能します。たとえば、「5.10 に一致します」。

于 2013-08-22T22:33:10.340 に答える
0

再帰降下パーサーを実装してみてください。電卓を実装する方法を説明するチュートリアル (Python で、Java にも同じ概念が適用されます) をここで見つけることができますhttp://blog.erezsh.com/how-to-write-a-電卓-in-70-python-lines-by-writing-a-recursive-descent-parser/

于 2013-08-22T22:56:24.933 に答える