質問の言い回しがうまくできていないので、ご容赦ください。例を挙げたほうがいいかもしれません。
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);
}