0

質問の言い回しがうまくできていないので、ご容赦ください。例を挙げたほうがいいかもしれません。

P&Q&Rに立候補したときに得たものは次のとおりです

PQR:
TTT = T
FFF = F
TTF = F
FFT = T
TFF = F
FTT = T
TFT = T
FTF = F

R を見てそこから値を取得しているだけで、P&Q は完全に無視されているようです。P&Q&~R を実行すると値が逆になりますが、たとえば ~P&~Q&R を実行すると値は変わりません。

現時点でコードが長すぎることはわかっていますが、コードの繰り返しを避けるためにコードを短くすることに取り組んでいます。今のところ、この問題を修正したいと思います。

FTF を評価するコード スニペットを次に示します。

    //Evaluate PQR = false, true, false, ftf

    for(int i=0;i<x.length();i++)
    {
        char ch = x.charAt(i);
        char t = 'T';
        char f = 'F';

        if (ch=='R' || ch=='P')
        {
            S7.push(f);
            ftf+=f;  
        }
        if (ch == 'Q')
        {
            S7.push(t);
            ftf+=t;
        }

        else if(ch=='>')
        {
            if(S7.peek() == 'T' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(t);}
            else if(S7.peek() == 'T' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(t);}
            else if(S7.peek() == 'F' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(f);}
            else if (S7.peek() == 'F' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(t);}

            ftf+=ch;
        }
        else if(ch=='<')
        {
            if(S7.peek() == 'T' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(t);}
            else if(S7.peek() == 'T' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(f);}
            else if(S7.peek() == 'F' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(f);}
            else if (S7.peek() == 'F' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(t);}

            ftf+=ch;
        }
        else if(ch=='&')
        {   
            if(S7.peek() == 'T' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(t);}
            else if(S7.peek() == 'T' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(f);}
            else if(S7.peek() == 'F' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(f);}
            else if (S7.peek() == 'F' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(f);}

            ftf+=ch;
        }
        else if(ch=='v')
        {    
            if(S7.peek() == 'T' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(t);}
            else if(S7.peek() == 'T' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(t);}
            else if(S7.peek() == 'F' && S7.prevPeek() == 'T'){
                S7.pop();
                S7.pop();
                S7.push(t);}
            else if (S7.peek() == 'F' && S7.prevPeek() == 'F'){
                S7.pop();
                S7.pop();
                S7.push(f);}

            ftf+=ch;
        }
        else if(ch=='~')
        {
            if(S7.peek() == 'T'){
                S7.pop();
                S7.push(f);}
            else{
                S7.pop();
                S7.push(t);}

            ftf+=ch;
        }
    }

必要に応じてさらにコードを投稿したり、明確でない場合は目的を説明したりできます。

私は次のようなことをしたい:

System.out.println("FTF = " + S7.pop());

正しい値を取得します。

Infix to Postfix メソッド

public void postFix(String x)
{

    Operations newList = new Operations();
    output = "";
    for(int i=0; i<x.length(); i++)
    {
        char ch = x.charAt(i);

        if(ch =='>' || ch=='<' || ch=='v' || ch=='&' || ch=='~' )
        {

            while(!newList.empty() && (priority(newList.peek()) >= priority(ch)))
            {
                output+=newList.peek();
                newList.pop();
            }
            newList.push(ch);
        }
        else if(ch=='(')
        {
            newList.push(ch);
        }
        else if(ch==')')
        {
            while (!newList.peek().equals('('))
                output+=newList.pop();
            newList.pop();
        }
        else

            output+=ch;

    }

    while(!newList.empty())
    {
        output+=newList.pop();
    }
    System.out.println("THE INFIX = "+x);
    System.out.println("THE POSTFIX = "+output);

}
4

0 に答える 0