使用中缀代码

时间:2017-02-21 04:35:53

标签: java

我被困在这项任务上。我正在读取文件,并且每行都运行checkInfix静态方法。执行checkInfix方法后,它应该返回我正在读取的中缀行的计算。例如,第一个是5 * 6 + 4 = 34。如果没有那么它应该说"无效"。但是,如您所见,某些行的输出对于此程序是错误的。 我的输出低于....

5 * 6 + 4< =这是正确的,因为它打印34。

= 34

3 - 2 +< =正确答案

无效

(3 * 4 - (2 + 5))* 4/2< =这个应该打印,10个用于回答但是没有...打印无效

无效

10 + 6 * 11 - (3 * 2 + 14)/ 2< =这个应该打印,66表示答案,但不打印..

无效

2 *(12 +(3 + 5)* 2< =这是正确的

无效

无效

非常感谢您对此进行调查! code ::::>我没有发布主函数,因为那里什么都没有。如果你想要我可以发布它,如果你想看到它。

public static int checkInfix(String inf)
{
    char[] c = inf.toCharArray();
    Stack<Integer> into = new Stack<Integer>();
    Stack<Character>charo = new Stack<Character>();


    for (int i = 0; i < c.length; i++)
    {

        if (c[i] == ' ' || c[i]==',')
            continue;

        if (iOperand(c[i])){ // checking for operand 0 to 9
            StringBuffer z = new StringBuffer();
            while (i < c.length && c[i] >= '0' && c[i] <= '9')
                z.append(c[i++]);
            into.push(Integer.parseInt(z.toString()));
        }
        else if (c[i] == '(')
            charo.push(c[i]);

        else if (c[i] == ')')
        {
            while (!charo.empty()&& charo.peek() != '(')
                into.push(calucator(charo.pop(), into.pop(), into.pop()));
            charo.pop();
        }

        else if (iOperator(c[i])){ // checking for operator +,-,*,/
            while (!charo.empty() && HigerPreced(c[i],charo.peek()))
                into.push(calucator(charo.pop(), into.pop(), into.pop()));
            charo.push(c[i]);
        }
    }//end of for loop

    while (!charo.empty())
        into.push(calucator(charo.pop(), into.pop(), into.pop()));
    return into.pop();
}//end of checkinfix class



public static boolean iOperator(char C) {
    if (C == '+' || C == '-' || C == '*' || C == '/' || C == '%' )
        return  true;
    return false;
}
public static boolean iOperand(char C){
    if (C >= '0' && C<='9')
        return true;
    return false;
}
//check for precedence
public static boolean HigerPreced(char oprt1,char oprt2){
    if (oprt2 == ')' || oprt2 == '(' )return false;
    if ((oprt1 == '*'|| oprt1=='/')&&(oprt1=='+'||oprt1=='-'))return false;
    else
        return true;
}
//calculating
public static int calucator(char into, int oprnd1, int oprnd2)
{
    switch(into)
    {
    case '+': return oprnd1 + oprnd2;
    case '-': return oprnd1 - oprnd2;
    case '*': return oprnd1 * oprnd2;
    case '/': return oprnd1/oprnd2;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

(oprt1 == '*'|| oprt1=='/')&&(oprt1=='+'||oprt1=='-')

oprt2应该出现在这个表达式中......目前它永远不会成真。