Java真值表堆栈-仅返回上次计算的值?

Java真值表堆栈-仅返回上次计算的值?,java,stack,truthtable,Java,Stack,Truthtable,我很难正确表达我的问题,所以请耐心听我说。最好举个例子 这是我参加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的代码片段:

我很难正确表达我的问题,所以请耐心听我说。最好举个例子

这是我参加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;
        }
    }
以获得正确的值

中缀后缀法

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);

}
public void后缀(字符串x)
{
操作newList=新操作();
输出=”;
对于(int i=0;i=priority(ch)))
{
output+=newList.peek();
newList.pop();
}
newList.push(ch);
}
else if(ch=='(')
{
newList.push(ch);
}
else如果(ch=='))
{
而(!newList.peek().equals('('))
output+=newList.pop();
newList.pop();
}
其他的
输出+=ch;
}
而(!newList.empty())
{
output+=newList.pop();
}
System.out.println(“中缀=“+x”);
System.out.println(“后缀=”+输出);
}

这段代码中的大多数似乎都在指定如何修改运算符的堆栈,例如
&
,但您的输入中没有这些。为什么您希望代码将堆栈上的内容组合在一起运行?P&Q&R会做正确的事情吗?等等……您使用的是中缀符号,当您你读了操作符???我的错,我没有包含修复后的代码,我现在将它添加到我的原始帖子中-虽然现在我正在查看它,我弹出并推到一个新的操作,名为newList,我没有在评估中使用它。@并且返回输入会拾取符号。PQR只是输出的标题,所以你可以看到t和Fs对应于。
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);

}