真值表求解Java语言实现———离散数字

目录

前言

一.判断输入表达式是否正确

二.求解命题逻辑表达式的真值表

三.代码的运行过程

四.整体代码 


前言

        离散数学作为计算机专业非常重要的一门科目,其中有许多的解题过程都可以通过代码来进行实现。当我学完第一章之后,发现求解命题逻辑表达式真值表的过程是非常枯燥且繁琐的。对于这一问题,我想通过代码的方式来实现真值表的求解过程。经过三天的不懈努力,最终我也完成了代码的编写。该代码主要分为三个功能,第一个功能是判断输入的命题逻辑表达式是否正确,第二个功能是列出真值表的优先级,再求出各个优先级表达式的数据,列出完整的真值表。第三个功能是通过判断最后一个优先级的数据来得出该命题逻辑表达式是永真式还是永假式或者是可满足式,并且还可以使用真值表来判断两个命题逻辑表达式是否等价。这样就将繁琐的计算过程交给电脑来实现了。

一.判断输入表达式是否正确

        要判断表达式是否正确,第一步首先要判断表达式中每一个字符的左边和右边是否是可以匹配的字符,如果判断表达式中每一个字符左右两边的匹配都正确,那么这个表达式的第一步就处理完了。

         对于表达式的开头和结尾,表达式只能以”A“,”(“,”¬”三个符号开头,并以”A“,”)“两个符号结尾。

        对于这些判断的代码如下:

for(char i='a';i<='z';i++)//判断表达式开头是否是以”A“,”(“,”¬”开头
        {
            if(expression.charAt(0)==i)
            {
                C=1;
                break;
            }
        }
        for(char i='A';i<='Z';i++)
        {
            if(expression.charAt(0)==i)
            {
                C=1;
                break;
            }
        }
        if(expression.charAt(0)=='('||expression.charAt(0)=='¬')
        {
            C=1;
        }
        if(C==0)//如果B==0,则note的值+1
        {
            note=1;
        }

for(char i='a';i<='z';i++)//判断表达式开头是否是以”A“,”)“结尾
        {
            if(expression.charAt(length-1)==i)
            {
                C=1;
                break;
            }
        }
        for(char i='A';i<='Z';i++)
        {
            if(expression.charAt(length-1)==i)
            {
                C=1;
                break;
            }
        }
        if(expression.charAt(length-1)==')')
        {
            C=1;
        }
        if(C==0)//如果B==0,则note的值+1
        {
            note=1;
        }
for(int i=0;i<length-1;i++)
        {
            D=0;//D用于判断两个连续的符号是否为AA,如果判断为A则C++
            for(char j='a';j<='z';j++)
            {
                if(expression.charAt(i)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if(expression.charAt(i+1)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if((expression.charAt(i)==')'&&expression.charAt(i+1)==j)||(expression.charAt(i)==j&&expression.charAt(i+1)=='('))//用于判断是否是)A或者A(
                {
                    note=1;
                }
                if(expression.charAt(i)==j&&expression.charAt(i+1)=='¬')//用于判断是否是A¬
                {
                    note=1;
                }
            }
            for(char j='A';j<='Z';j++)
            {
                if(expression.charAt(i)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if(expression.charAt(i+1)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if((expression.charAt(i)==')'&&expression.charAt(i+1)==j)||(expression.charAt(i)==j&&expression.charAt(i+1)=='('))//用于判断是否是)A或者A(
                {
                    note=1;
                }
                if(expression.charAt(i)==j&&expression.charAt(i+1)=='¬')//用于判断是否是A¬
                {
                    note=1;
                }
            }
            if(expression.charAt(i)=='0'||expression.charAt(i)=='1')//用于判断两个连续的AA
            {
                D++;
            }
            if(expression.charAt(i+1)=='0'||expression.charAt(i+1)=='1')//用于判断两个连续的AA
            {
                D++;
            }
            if(D==2)
            {
                note=1;
            }
            if((expression.charAt(i)==')'&&(expression.charAt(i+1)=='0'||expression.charAt(i+1)=='1'))||(expression.charAt(i+1)=='('&&(expression.charAt(i)=='0'||expression.charAt(i)=='1')))//用于判断是否是)A或者A(
            {
                note=1;
            }
            if((expression.charAt(i)=='0'&&expression.charAt(i+1)=='¬')||expression.charAt(i)=='1'&&expression.charAt(i+1)=='¬')//用于判断是否是A¬
            {
                note=1;
            }
            if(expression.charAt(i)==')'&&expression.charAt(i+1)=='(')//用于判断是否是)(
            {
                note=1;
            }
            if(expression.charAt(i)=='('&&expression.charAt(i+1)==')')//用于判断是否是()
            {
                note=1;
            }
            if(expression.charAt(i)=='('&&(expression.charAt(i+1)=='∧'||expression.charAt(i+1)=='∨'||expression.charAt(i+1)=='→'||expression.charAt(i+1)=='↔'))//用于判断是否是(∧
            {
                note=1;
            }
            if(expression.charAt(i+1)==')'&&(expression.charAt(i)=='∧'||expression.charAt(i)=='∨'||expression.charAt(i)=='→'||expression.charAt(i)=='↔'))//用于判断是否是∧)
            {
                note=1;
            }
            if((expression.charAt(i)=='¬'&&expression.charAt(i+1)==')')||(expression.charAt(i)==')'&&expression.charAt(i+1)=='¬'))//用于判断是否是¬)和)¬
            {
                note=1;
            }
            if((expression.charAt(i)=='∧'||expression.charAt(i)=='∨'||expression.charAt(i)=='→'||expression.charAt(i)=='↔')&&(expression.charAt(i+1)=='∧'||expression.charAt(i+1)=='∨'||expression.charAt(i+1)=='→'||expression.charAt(i+1)=='↔'))//用于判断是否是∧∧
            {
                note=1;
            }
            if(expression.charAt(i)=='¬'&&(expression.charAt(i)=='∧'||expression.charAt(i)=='∨'||expression.charAt(i)=='→'||expression.charAt(i)=='↔'))//用于判断¬∧
            {
                note=1;
            }
        }
        if(note==1)
        {
            System.out.println("该公式不正确,无法进行计算!");
        }
        else
        {
            System.out.println("该公式正确");
        }

        表达式左右两边符号匹配判断完之后,还要判断表达式中是否出现了其他未知的符号。 这里可以通过对已知符号的数量进行计数并与输入表达式的长度进行对比,就能得出表达式中是否出现了其他未知的符号。之后还要判断括号是否匹配,可以先将表达式中的括号全部分离出来,再单独进行判断。如果没有括号,则不进行判断。

        具体代码如下:

if(A!=0)
        {
            //用于判断括号是否匹配,匹配就进行删去操作
            char[] copy2 =new char[A];
            for(int i=0;i<A;i++)
            {
                copy2[i]='.';
            }
            int B=0;
            for(int i=0;i<A;i++)
            {
                copy2[B]=copy1[i];
                if(B-1>=0)
                {
                    if(copy2[B-1]=='('&&copy2[B]==')')
                    {
                        copy2[B]='.';
                        copy2[B-1]='.';
                        B=B-2;
                    }
                }
                if(B<A-1)
                {
                    B++;
                }
            }
            if(copy2[0]=='('||copy2[0]==')')//如果copy2数组中还有“(",")"符号,说明括号匹配有问题
            {
                note=1;
            }
        }

         通过这几个操作,对表达式进行判断就可以基本确定表达式是否正确了。如果该表达是正确则继续进行真值表求解,如果不正确则退出程序。

二.求解命题逻辑表达式的真值表

        如果表达式中出现了多个”¬”符号,可以先将表达式进行化简,再对表达式进行处理。

具体代码如下:

char []sdf=new char[length];//用于存储将¬符号进行化简之后的字符串
            for(int i=0;i<length;i++)
            {
                sdf[i]='.';
            }
            int se,st=0;//se用于记录连续¬符号的数量,
            for(int i=0;i<length;i++)
            {
                se=0;
                if(expression.charAt(i)=='¬')
                {
                    se++;
                    for(;;)
                    {
                        i++;
                        if(expression.charAt(i)=='¬')
                        {
                            se++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    if(se%2!=0)
                    {
                        sdf[st]='¬';
                        if(st<length-1)
                        {
                            st++;
                        }
                    }
                }
                sdf[st]=expression.charAt(i);
                if(st<length-1)
                {
                    st++;
                }

        处理完之后再创建两个char类型的数组,第一个数组F用于存储表达式中不重复的大小写字母,0和1等字母。第二个数组F1用于存储表达式中大小写字母,0和1前面出现‘¬’符号的字母。

        具体代码如下:

char []F=new char[number2];//用于存储去重之后的大小写字母和0,1
            for(int i=0;i<number2;i++)
            {
                F[i]='.';
            }
            char []F1=new char[number2];//用于存储去重之后的大小写字母和0,1,且前面有“¬”符号
            for(int i=0;i<number2;i++)
            {
                F1[i]='.';
            }
            A=0;
            for(int i=0;i<se;i++)//将表达式里面的大小写字母,0,1去重
            {
                C=0;
                for(char j='a';j<='z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(A!=0)
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(j==F[k])
                                {
                                    C=1;
                                    break;
                                }
                            }
                        }
                        if(C==0)
                        {
                            F[A]=j;
                            if(A<number2-1)
                            {
                                A++;
                            }
                        }
                    }
                }
                C=0;
                for(char j='A';j<='Z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(A!=0)
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(j==F[k])
                                {
                                    C=1;
                                    break;
                                }
                            }
                        }
                        if(C==0)
                        {
                            F[A]=j;
                            if(A<number2-1)
                            {
                                A++;
                            }
                        }
                    }
                }
                C=0;
                if(sdf2[i]=='0')
                {
                    if(A!=0)
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='0')
                            {
                                C=1;
                                break;
                            }
                        }
                    }
                    if(C==0)
                    {
                        F[A]='0';
                        if(A<number2-1)
                        {
                            A++;
                        }
                    }
                }
                C=0;
                if(sdf2[i]=='1')
                {
                    if(A!=0)
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='1')
                            {
                                C=1;
                                break;
                            }
                        }
                    }
                    if(C==0)
                    {
                        F[A]='1';
                        if(A<number2-1)
                        {
                            A++;
                        }
                    }
                }
            }
            for(int i=0;i<se;i++)
            {
                for(char j='a';j<='z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(i-1>=0&&sdf2[i-1]=='¬')
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(F[k]==j)
                                {
                                    F1[k]=j;
                                }
                            }
                        }
                    }
                }
                for(char j='A';j<='Z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(i-1>=0&&sdf2[i-1]=='¬')
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(F[k]==j)
                                {
                                    F1[k]=j;
                                }
                            }
                        }
                    }
                }
                if(sdf2[i]=='0')
                {
                    if(i-1>=0&&sdf2[i-1]=='¬')
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='0')
                            {
                                F1[k]='0';
                            }
                        }
                    }
                }
                if(sdf2[i]=='1')
                {
                    if(i-1>=0&&sdf2[i-1]=='¬')
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='1')
                            {
                                F1[k]='1';
                            }
                        }
                    }
                }
            }
            A=0;
            for(int i=0;i<number2;i++)
            {
                if(F[i]!='.')
                {
                    A++;
                }
            }

        对于F和F1两个数组,还需要创建两个char类型的二维数组分别存放真值表的数据。

        具体代码如下:

            int str= (int) Math.pow(2,A);
            int [][]ste=new int[A][str];
            int J=1;
            for(int i=A-1;i>=0;i--)//对于大小写字母,0,1通过二进制不断加一,如果是1则全为1,如果是0则全为0
            {
                if(F[i]=='0')
                {
                    for(int j=0;j<str;j++)
                    {
                        ste[i][j]=1;
                    }
                }
                else
                if(F[i]=='1')
                {
                    for(int j=0;j<str;j++)
                    {
                        ste[i][j]=0;
                    }
                }
                else
                {
                    for(int j=0;j<str;j++)
                    {
                        if(ste[i][j]==0)
                        {
                            ste[i][j+J]=1;
                        }
                    }
                    J*=2;
                }
            }
            int [][]ste1=new int[A][str];
            for(int i=0;i<A;i++)//用于将元素的数据进行转化,0变为1,1变为0
            {
                if(F1[i]!='.')
                {
                    if(F1[i]==F[i])
                    {
                        for(int j=0;j<str;j++)
                        {
                            if(ste[i][j]==0)
                            {
                                ste1[i][j]=1;
                            }
                            else
                            {
                                ste1[i][j]=0;
                            }
                            //ste1[i][j]=-ste[i][j];
                        }
                    }
                }
            }

        之后就需要对整个表达式来进行处理,首先需要把优先级通过数字的大小来进行区分,数字越大则说明优先级越高,并且两个配对的括号会有相同的数字。

            for(int i=0;i<se;i++)//用于将括号分为不同等级的优先级
            {
                if(sdf2[i]=='(')
                {
                    qwe[i]=++H;
                    if(H>MAX)
                    {
                        MAX=H;
                    }
                }
                else
                if(sdf2[i]==')')
                {
                    qwe[i]=H--;
                }
                else
                {
                    qwe[i]=-1;
                }
            }

        比如表达式(¬A→(¬B→¬C)→(¬D→¬E)→(¬B→¬C→(¬B→¬C→(¬B→¬C→(¬B→¬C→(¬B→¬C→(¬B→¬C)))))))的优先级如下:

 1 -1 -1 -1 2 -1 -1 -1 -1 -1 2 -1 2 -1 -1 -1 -1 -1 2 -1 2 -1 -1 -1 -1 -1 -1 3 -1 -1 -1 -1 -1 -1 4 -1 -1 -1 -1 -1 -1 5 -1 -1 -1 -1 -1 -1 6 -1 -1 -1 -1 -1 -1 7 -1 -1 -1 -1 -1 7 6 5 4 3 2 1 0

其中-1表示非括号的部分,大于0的数表示括号的优先级,其中最后一个0需要在代码的后面做特殊处理。

        最后对表达式进行处理时,对不同的运算符号的处理除了最后的运算方式不同之外其他的处理方式是基本一致的。需要先创建一个数组数组的大小与化简后数组的大小一致,当高的优先级结果计算完之后就将运算之后的表达式存入到这个数组中,在以此方式不断的运算优先级更低的表达式,同时,还需要判断每个大小写字母,0和1前面的符号是否为'¬'符号,还需要判断每个'('符号前面是否有'¬'符号。并将每一个优先级表达式运算完之后的数据存储到特定的数组中。对于没有括号存在时还要做特殊处理,这与括号处理完之后没有括号存在时的处理一致,只需要加一些限定条件即可。

三.代码的运行过程

        在网上随便找了一个题用于做验证。

         验证过程如下:

四.整体代码 

package zuopin;
import java.util.Scanner;
public class str2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("【真值表求解】");
        System.out.println("输入可以包括字母大小写,否定词‘¬’,合取词‘∧’,析取词‘∨’,蕴涵词‘→’,等值词‘↔’,0和1");
        System.out.println("请输入表达式:");
        String expression;
        expression=input.next();//表达式输入
        int length=expression.length();//表达式长度计算
        //note用于表示表达式是否正确,如果note=0说明表达式正确,如果note=1说明表达式不正确,number判断表达式长度是否为length。
        //A用于计算表达式中“(",")"符号的数量,C用于判断表达式开头是否是以”A“,”(“,”¬”开头,以”A“,”)“结尾。
        //E用于判断表达式中是否有大写字母或小写字母,0,1和合取词‘∧’,析取词‘∨’,蕴涵词‘→’,等值词‘↔’。
        //number2用于记录小写字母,大写字母,0,1的数量
        int A=0,note=0,number=0,C=0,D,E=0,number2=0;
        char[] copy1 =new char[length];//将表达式中的括号分离出来
        for(int i=0;i<length;i++)
        {
            copy1[i]='.';
        }
        for(char i='a';i<='z';i++)//判断表达式开头是否是以”A“,”(“,”¬”开头
        {
            if(expression.charAt(0)==i)
            {
                C=1;
                break;
            }
        }
        for(char i='A';i<='Z';i++)
        {
            if(expression.charAt(0)==i)
            {
                C=1;
                break;
            }
        }
        if(expression.charAt(0)=='('||expression.charAt(0)=='¬'||expression.charAt(0)=='0'||expression.charAt(0)=='1')
        {
            C=1;
        }
        if(C==0)//如果B==0,则note的值+1
        {
            note=1;
        }
        for(char i='a';i<='z';i++)//判断表达式开头是否是以”A“,”)“结尾
        {
            if(expression.charAt(length-1)==i)
            {
                C=1;
                break;
            }
        }
        for(char i='A';i<='Z';i++)
        {
            if(expression.charAt(length-1)==i)
            {
                C=1;
                break;
            }
        }
        if(expression.charAt(length-1)==')'||expression.charAt(0)=='0'||expression.charAt(0)=='1')
        {
            C=1;
        }
        if(C==0)//如果B==0,则note的值+1
        {
            note=1;
        }
        for(int i=0;i<length;i++)
        {
            if(expression.charAt(i)=='('||expression.charAt(i)==')')//分离括号操作
            {
                copy1[A]=expression.charAt(i);
                A++;
            }
            for(char j='a';j<='z';j++)//判断表达式中是否存在其他未知符号
            {
                if(expression.charAt(i)==j)
                {
                    E=1;
                    number++;
                    number2++;
                }
            }
            for(char j='A';j<='Z';j++)
            {
                if(expression.charAt(i)==j)
                {
                    E=1;
                    number++;
                    number2++;
                }
            }
            if(expression.charAt(i)=='('||expression.charAt(i)==')'||expression.charAt(i)=='¬'||expression.charAt(i)=='∧'||expression.charAt(i)=='∨'||expression.charAt(i)=='→'||expression.charAt(i)=='↔'||expression.charAt(i)=='0'||expression.charAt(i)=='1')
            {
                number++;
            }
            if(expression.charAt(i)=='0'||expression.charAt(i)=='1')
            {
                E=1;
                number2++;
            }
            if(expression.charAt(i)=='∧'||expression.charAt(i)=='∨'||expression.charAt(i)=='→'||expression.charAt(i)=='↔')
            {
                E=1;
            }
        }
        if(E==0)
        {
            note=1;
        }
        if(number!=length)
        {
            note=1;
        }
        if(A!=0)
        {
            //用于判断括号是否匹配,匹配就进行删去操作
            char[] copy2 =new char[A];
            for(int i=0;i<A;i++)
            {
                copy2[i]='.';
            }
            int B=0;
            for(int i=0;i<A;i++)
            {
                copy2[B]=copy1[i];
                if(B-1>=0)
                {
                    if(copy2[B-1]=='('&&copy2[B]==')')
                    {
                        copy2[B]='.';
                        copy2[B-1]='.';
                        B=B-2;
                    }
                }
                if(B<A-1)
                {
                    B++;
                }
            }
            if(copy2[0]=='('||copy2[0]==')')//如果copy2数组中还有“(",")"符号,说明括号匹配有问题
            {
                note=1;
            }
        }
        for(int i=0;i<length-1;i++)
        {
            D=0;//D用于判断两个连续的符号是否为AA,如果判断为A则C++
            for(char j='a';j<='z';j++)
            {
                if(expression.charAt(i)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if(expression.charAt(i+1)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if((expression.charAt(i)==')'&&expression.charAt(i+1)==j)||(expression.charAt(i)==j&&expression.charAt(i+1)=='('))//用于判断是否是)A或者A(
                {
                    note=1;
                }
                if(expression.charAt(i)==j&&expression.charAt(i+1)=='¬')//用于判断是否是A¬
                {
                    note=1;
                }
                if((expression.charAt(i)=='0'&&expression.charAt(i+1)==j)||(expression.charAt(i+1)=='0'&&expression.charAt(i)==j)||(expression.charAt(i)=='1'&&expression.charAt(i+1)==j)||(expression.charAt(i+1)=='1'&&expression.charAt(i)==j))
                {
                    note=1;
                }
            }
            for(char j='A';j<='Z';j++)
            {
                if(expression.charAt(i)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if(expression.charAt(i+1)==j)//用于判断两个连续的AA
                {
                    D++;
                }
                if((expression.charAt(i)==')'&&expression.charAt(i+1)==j)||(expression.charAt(i)==j&&expression.charAt(i+1)=='('))//用于判断是否是)A或者A(
                {
                    note=1;
                }
                if(expression.charAt(i)==j&&expression.charAt(i+1)=='¬')//用于判断是否是A¬
                {
                    note=1;
                }
                if((expression.charAt(i)=='0'&&expression.charAt(i+1)==j)||(expression.charAt(i+1)=='0'&&expression.charAt(i)==j)||(expression.charAt(i)=='1'&&expression.charAt(i+1)==j)||(expression.charAt(i+1)=='1'&&expression.charAt(i)==j))
                {
                    note=1;
                }
            }
            if(D==2)
            {
                note=1;
            }
            if(expression.charAt(i)=='0'&&expression.charAt(i+1)=='1')//用于判断两个连续的AA
            {
                note=1;
            }
            if(expression.charAt(i+1)=='0'&&expression.charAt(i)=='1')//用于判断两个连续的AA
            {
                note=1;
            }
            if(expression.charAt(i)=='0'&&expression.charAt(i+1)=='0')//用于判断两个连续的AA
            {
                note=1;
            }
            if(expression.charAt(i+1)=='1'&&expression.charAt(i)=='1')//用于判断两个连续的AA
            {
                note=1;
            }
            if((expression.charAt(i)==')'&&(expression.charAt(i+1)=='0'||expression.charAt(i+1)=='1'))||(expression.charAt(i+1)=='('&&(expression.charAt(i)=='0'||expression.charAt(i)=='1')))//用于判断是否是)A或者A(
            {
                note=1;
            }
            if((expression.charAt(i)=='0'&&expression.charAt(i+1)=='¬')||(expression.charAt(i)=='1'&&expression.charAt(i+1)=='¬'))//用于判断是否是A¬
            {
                note=1;
            }
            if(expression.charAt(i)==')'&&expression.charAt(i+1)=='(')//用于判断是否是)(
            {
                note=1;
            }
            if(expression.charAt(i)=='('&&expression.charAt(i+1)==')')//用于判断是否是()
            {
                note=1;
            }
            if(expression.charAt(i)=='('&&(expression.charAt(i+1)=='∧'||expression.charAt(i+1)=='∨'||expression.charAt(i+1)=='→'||expression.charAt(i+1)=='↔'))//用于判断是否是(∧
            {
                note=1;
            }
            if(expression.charAt(i+1)==')'&&(expression.charAt(i)=='∧'||expression.charAt(i)=='∨'||expression.charAt(i)=='→'||expression.charAt(i)=='↔'))//用于判断是否是∧)
            {
                note=1;
            }
            if((expression.charAt(i)=='¬'&&expression.charAt(i+1)==')')||(expression.charAt(i)==')'&&expression.charAt(i+1)=='¬'))//用于判断是否是¬)和)¬
            {
                note=1;
            }
            if((expression.charAt(i)=='∧'||expression.charAt(i)=='∨'||expression.charAt(i)=='→'||expression.charAt(i)=='↔')&&(expression.charAt(i+1)=='∧'||expression.charAt(i+1)=='∨'||expression.charAt(i+1)=='→'||expression.charAt(i+1)=='↔'))//用于判断是否是∧∧
            {
                note=1;
            }
            if(expression.charAt(i)=='¬'&&(expression.charAt(i+1)=='∧'||expression.charAt(i+1)=='∨'||expression.charAt(i+1)=='→'||expression.charAt(i+1)=='↔'))//用于判断¬∧
            {
                note=1;
            }
        }
        if(note==1)
        {
            System.out.println("该公式不正确,无法进行计算!");
        }
        else
        {
            System.out.println("该公式正确");
        }
        if(note==0)
        {
            char []sdf=new char[length];//用于存储将¬符号进行化简之后的字符串
            for(int i=0;i<length;i++)
            {
                sdf[i]='.';
            }
            int se,st=0;//se用于记录连续¬符号的数量,
            for(int i=0;i<length;i++)
            {
                se=0;
                if(expression.charAt(i)=='¬')
                {
                    se++;
                    for(;;)
                    {
                        i++;
                        if(expression.charAt(i)=='¬')
                        {
                            se++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    if(se%2!=0)
                    {
                        sdf[st]='¬';
                        if(st<length-1)
                        {
                            st++;
                        }
                    }
                }
                sdf[st]=expression.charAt(i);
                if(st<length-1)
                {
                    st++;
                }
            }
            se=0;
            for(int i=0;i<length;i++)
            {
                if(sdf[i]!='.')
                {
                    se++;
                }
            }
            char []sdf2=new char[se];//用于存储将¬符号进行化简之后的字符串2
            for(int i=0;i<se;i++)
            {
                sdf2[i]=sdf[i];
                //System.out.print(sdf2[i]);//检查化简¬符号后的公式
            }
            char []F=new char[number2];//用于存储去重之后的大小写字母和0,1
            for(int i=0;i<number2;i++)
            {
                F[i]='.';
            }
            char []F1=new char[number2];//用于存储去重之后的大小写字母和0,1,且前面有“¬”符号
            for(int i=0;i<number2;i++)
            {
                F1[i]='.';
            }
            A=0;
            for(int i=0;i<se;i++)//将表达式里面的大小写字母,0,1去重
            {
                C=0;
                for(char j='a';j<='z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(A!=0)
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(j==F[k])
                                {
                                    C=1;
                                    break;
                                }
                            }
                        }
                        if(C==0)
                        {
                            F[A]=j;
                            if(A<number2)
                            {
                                A++;
                            }
                        }
                    }
                }
                C=0;
                for(char j='A';j<='Z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(A!=0)
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(j==F[k])
                                {
                                    C=1;
                                    break;
                                }
                            }
                        }
                        if(C==0)
                        {
                            F[A]=j;
                            if(A<number2)
                            {
                                A++;
                            }
                        }
                    }
                }
                C=0;
                if(sdf2[i]=='0')
                {
                    if(A!=0)
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='0')
                            {
                                C=1;
                                break;
                            }
                        }
                    }
                    if(C==0)
                    {
                        F[A]='0';
                        if(A<number2)
                        {
                            A++;
                        }
                    }
                }
                C=0;
                if(sdf2[i]=='1')
                {
                    if(A!=0)
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='1')
                            {
                                C=1;
                                break;
                            }
                        }
                    }
                    if(C==0)
                    {
                        F[A]='1';
                        if(A<number2)
                        {
                            A++;
                        }
                    }
                }
            }
            for(int i=0;i<se;i++)
            {
                for(char j='a';j<='z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(i-1>=0&&sdf2[i-1]=='¬')
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(F[k]==j)
                                {
                                    F1[k]=j;
                                }
                            }
                        }
                    }
                }
                for(char j='A';j<='Z';j++)
                {
                    if(sdf2[i]==j)
                    {
                        if(i-1>=0&&sdf2[i-1]=='¬')
                        {
                            for(int k=0;k<A;k++)
                            {
                                if(F[k]==j)
                                {
                                    F1[k]=j;
                                }
                            }
                        }
                    }
                }
                if(sdf2[i]=='0')
                {
                    if(i-1>=0&&sdf2[i-1]=='¬')
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='0')
                            {
                                F1[k]='0';
                            }
                        }
                    }
                }
                if(sdf2[i]=='1')
                {
                    if(i-1>=0&&sdf2[i-1]=='¬')
                    {
                        for(int k=0;k<A;k++)
                        {
                            if(F[k]=='1')
                            {
                                F1[k]='1';
                            }
                        }
                    }
                }
            }
            A=0;
            for(int i=0;i<number2;i++)
            {
                if(F[i]!='.')
                {
                    A++;
                }
            }
            int str= (int) Math.pow(2,A);
            int [][]ste=new int[A][str];
            int J=1;
            for(int i=A-1;i>=0;i--)//对于大小写字母,0,1通过二进制不断加一,如果是1则全为1,如果是0则全为0
            {
                if(F[i]=='0')
                {
                    for(int j=0;j<str;j++)
                    {
                        ste[i][j]=1;
                    }
                }
                else
                if(F[i]=='1')
                {
                    for(int j=0;j<str;j++)
                    {
                        ste[i][j]=0;
                    }
                }
                else
                {
                    for(int j=0;j<str;j++)
                    {
                        if(ste[i][j]==0)
                        {
                            ste[i][j+J]=1;
                        }
                    }
                    J*=2;
                }
            }
        /*for(int i=0;i<A;i++)
        {
            for(int j=0;j<str;j++)
            {
                System.out.print(ste[i][j]+" ");
            }
            System.out.println();
        }*/
            int [][]ste1=new int[A][str];
        /*System.out.println(F);//检查元素
        System.out.println(F1);//检查负元素*/
        for(int i=0;i<A;i++)//用于将元素的数据进行转化,0变为1,1变为0
        {
            if(F1[i]!='.')
            {
                if(F1[i]==F[i])
                {
                    for(int j=0;j<str;j++)
                    {
                        if(ste[i][j]==0)
                        {
                            ste1[i][j]=1;
                        }
                        else
                        {
                            ste1[i][j]=0;
                        }
                        //ste1[i][j]=-ste[i][j];
                    }
                }
            }
        }
        /*for(int i=0;i<A;i++)
        {
            for(int j=0;j<str;j++)
            {
                System.out.print(ste[i][j]+" ");
            }
            System.out.println();
        }
        for(int i=0;i<A;i++)
        {
            for(int j=0;j<str;j++)
            {
                System.out.print(ste1[i][j]+" ");
            }
            System.out.println();
        }*/
        /*System.out.println(F);//检查元素
        System.out.println(F1);//检查负元素*/
            //确定优先级sdf2
            int []qwe=new int[se+1];//创建qwe用于给括号分配数字,来统计优先级
            int H=0,MAX=-1;//数字,MAX用于记录最大的数
            for(int i=0;i<se;i++)//用于将括号分为不同等级的优先级
            {
                if(sdf2[i]=='(')
                {
                    qwe[i]=++H;
                    if(H>MAX)
                    {
                        MAX=H;
                    }
                }
                else
                if(sdf2[i]==')')
                {
                    qwe[i]=H--;
                }
                else
                {
                    qwe[i]=-1;
                }
            }
            qwe[se]=0;
            //针对没有括号的情况,MAX的赋值
            int O=0;
            for(int i=0;i<length;i++)
            {
                if(copy1[i]=='('||copy1[i]==')')
                {
                    O++;
                }
            }
            if(O==0)
            {
                MAX=0;
            }
            //System.out.println(MAX);
        /*for(int i=0;i<se+1;i++)//用于显示数字优先级
        {
            System.out.print(qwe[i]+" ");
        }*/
            char [][]save=new char[se][se];//用于记录表达式
            int []G=new int[se];//用于记录运算符号的位置
            int [][]save1=new int[se][str];//用于记录表达式的所有数
            int T=0;//用于记录表达式的使用个数
            for(int i=0;i<se;i++)
            {
                for(int j=0;j<se;j++)
                {
                    save[i][j]='.';
                }
            }
            int JSW=0;//用于没有括号的情况
            char []JT=new char[length];//用于存储表达式
            int JK;
            for(int r=0;r<se;r++)
            {
                JT[r]='.';
            }
            for(int i=MAX;i>=0;i--)//对优先级依次进行处理
            {
                if(i==0)
                {
                    JSW=1;
                }
                for(int j=0;j<se;j++)
                {
                    if(qwe[j]==i||JSW==1)
                    {
                        if(JSW==1)
                        {
                            j=-1;
                            JK=se;
                        }
                        else
                        {
                            JK=0;
                            for(int k=j+1;qwe[k]!=i;k++)
                            {
                                JK++;
                            }
                        }
                        for(int k=j+1;qwe[k]!=i;k++)
                        {
                            if(sdf2[k]=='∧'&&JT[k]=='.')
                            {
                                if(JT[k-1]!='.')
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W5=0,W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        L=0;
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        JT[G[T]]='∧';
                                        save[T][G[T]]='∧';
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==1&&save1[W6][y]==1)
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        int W5=0,L=0;//W5用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        int []S2=new int[str];
                                        if(sdf2[k+1]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+2]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==1&&S2[y]==1)
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                }
                                else
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        int []S1=new int[str];
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k-2+e]=sdf2[k-2+e];
                                                save[T][k-2+e]=JT[k-2+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k-1+e]=sdf2[k-1+e];
                                                save[T][k-1+e]=JT[k-1+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W6][y]==1&&S1[y]==1)
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<5;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<3;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        for(int k=j+1;qwe[k]!=i;k++)
                        {
                            if(sdf2[k]=='∨'&&JT[k]=='.')
                            {
                                if(JT[k-1]!='.')
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W5=0,W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        L=0;
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        JT[G[T]]='∨';
                                        save[T][G[T]]='∨';
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==1||save1[W6][y]==1)
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        int W5=0,L=0;//W5用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        int []S2=new int[str];
                                        if(sdf2[k+1]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+2]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==1||S2[y]==1)
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                }
                                else
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        int []S1=new int[str];
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k-2+e]=sdf2[k-2+e];
                                                save[T][k-2+e]=JT[k-2+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k-1+e]=sdf2[k-1+e];
                                                save[T][k-1+e]=JT[k-1+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W6][y]==1||S1[y]==1)
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<5;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1||S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1||S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1||S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<3;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1||S2[y]==1)
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        for(int k=j+1;qwe[k]!=i;k++)
                        {
                            if(sdf2[k]=='→'&&JT[k]=='.')
                            {
                                if(JT[k-1]!='.')
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W5=0,W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        L=0;
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        JT[G[T]]='→';
                                        save[T][G[T]]='→';
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==1&&save1[W6][y]==0)
                                            {
                                                save1[T][y]=0;
                                            }
                                            else
                                            {
                                                save1[T][y]=1;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        int W5=0,L=0;//W5用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        int []S2=new int[str];
                                        if(sdf2[k+1]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+2]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==1&&S2[y]==0)
                                            {
                                                save1[T][y]=0;
                                            }
                                            else
                                            {
                                                save1[T][y]=1;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                }
                                else
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        int []S1=new int[str];
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k-2+e]=sdf2[k-2+e];
                                                save[T][k-2+e]=JT[k-2+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k-1+e]=sdf2[k-1+e];
                                                save[T][k-1+e]=JT[k-1+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W6][y]==0&&S1[y]==1)
                                            {
                                                save1[T][y]=0;
                                            }
                                            else
                                            {
                                                save1[T][y]=1;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<5;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==0)
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==0)
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==0)
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<3;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==1&&S2[y]==0)
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        for(int k=j+1;qwe[k]!=i;k++)
                        {
                            if(sdf2[k]=='↔'&&JT[k]=='.')
                            {
                                if(JT[k-1]!='.')
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W5=0,W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        L=0;
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        JT[G[T]]='↔';
                                        save[T][G[T]]='↔';
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==save1[W6][y])
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        int W1=k-1;//记录当前位置1
                                        int W2=k-1;//记录当前位置1
                                        do {
                                            W1--;
                                        }while(W1!=j+1&&JT[W1-1]!='.');
                                        int W5=0,L=0;//W5用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W1&&w<=W2)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W1||w>W2)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W5=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W1;e<=W2;e++)
                                        {
                                            save[T][e]=save[W5][e];
                                        }
                                        int []S2=new int[str];
                                        if(sdf2[k+1]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+2]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k+e]=sdf2[k+e];
                                                save[T][k+e]=JT[k+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]+1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S2[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W5][y]==S2[y])
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                }
                                else
                                {
                                    if(JT[k+1]!='.')
                                    {
                                        int W3=k+1;//记录当前位置2
                                        int W4=k+1;//记录当前位置2
                                        do {
                                            W4++;
                                        }while(W4!=JK+j&&JT[W4+1]!='.');
                                        int W6=0,L=0;//W5,W6用于记录与哪一个表达式相匹配,L用于退出条件
                                        for(int r=0;r<se;r++)
                                        {
                                            for(int w=0;w<se;w++)
                                            {
                                                if(w>=W3&&w<=W4)
                                                {
                                                    if(save[r][w]=='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w<W3||w>W4)
                                                {
                                                    if(save[r][w]!='.')
                                                    {
                                                        break;
                                                    }
                                                }
                                                if(w==se-1)
                                                {
                                                    W6=r;
                                                    L=1;
                                                    break;
                                                }
                                            }
                                            if(L==1)
                                            {
                                                break;
                                            }
                                        }
                                        G[T]=k;
                                        for(int e=W3;e<=W4;e++)
                                        {
                                            save[T][e]=save[W6][e];
                                        }
                                        int []S1=new int[str];
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            for(int e=0;e<3;e++)
                                            {
                                                JT[k-2+e]=sdf2[k-2+e];
                                                save[T][k-2+e]=JT[k-2+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F1[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste1[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            for(int e=0;e<2;e++)
                                            {
                                                JT[k-1+e]=sdf2[k-1+e];
                                                save[T][k-1+e]=JT[k-1+e];
                                            }
                                            for(int y=0;y<A;y++)
                                            {
                                                if(save[T][G[T]-1]==F[y])
                                                {
                                                    for(int U=0;U<str;U++)
                                                    {
                                                        S1[U]=ste[y][U];
                                                    }
                                                }
                                            }
                                        }
                                        for(int y=0;y<str;y++)
                                        {
                                            if(save1[W6][y]==S1[y])
                                            {
                                                save1[T][y]=1;
                                            }
                                            else
                                            {
                                                save1[T][y]=0;
                                            }
                                        }
                                        if(T<se-1)
                                        {
                                            T++;
                                        }
                                    }
                                    else
                                    {
                                        if(k-2>=0&&sdf2[k-2]=='¬')
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<5;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==S2[y])
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-2+e]=sdf2[k-2+e];
                                                    save[T][k-2+e]=JT[k-2+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste1[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==S2[y])
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if(sdf2[k+1]=='¬')
                                            {
                                                for(int e=0;e<4;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]+2]==F1[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste1[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==S2[y])
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                            else
                                            {
                                                for(int e=0;e<3;e++)
                                                {
                                                    JT[k-1+e]=sdf2[k-1+e];
                                                    save[T][k-1+e]=JT[k-1+e];
                                                }
                                                G[T]=k;
                                                int []S1=new int[str];
                                                int []S2=new int[str];
                                                for(int y=0;y<A;y++)
                                                {
                                                    if(save[T][G[T]-1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S1[U]=ste[y][U];
                                                        }
                                                    }
                                                    if(save[T][G[T]+1]==F[y])
                                                    {
                                                        for(int U=0;U<str;U++)
                                                        {
                                                            S2[U]=ste[y][U];
                                                        }
                                                    }
                                                }
                                                for(int y=0;y<str;y++)
                                                {
                                                    if(S1[y]==S2[y])
                                                    {
                                                        save1[T][y]=1;
                                                    }
                                                    else
                                                    {
                                                        save1[T][y]=0;
                                                    }
                                                }
                                                if(T<se-1)
                                                {
                                                    T++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if(JSW!=1&&T!=0)
                        {
                            int L2=j;
                            do{
                                L2++;
                            }while(qwe[L2]!=i);
                            for(int k=0;k<se;k++)
                            {
                                save[T][k]=save[T-1][k];
                            }
                            save[T][j]='(';
                            save[T][L2]=')';
                            JT[j]='(';
                            JT[L2]=')';
                            if(j-1>=0&&sdf2[j-1]=='¬')
                            {
                                save[T][j-1]='¬';
                                JT[j-1]='¬';
                                for(int k=0;k<str;k++)
                                {
                                    if(save1[T-1][k]==0)
                                    {
                                        save1[T][k]=1;
                                    }
                                    else
                                    {
                                        save1[T][k]=0;
                                    }
                                }
                            }
                            else
                            {
                                for(int k=0;k<str;k++)
                                {
                                    save1[T][k]=save1[T-1][k];
                                }
                            }
                            if(T<se-1)
                            {
                                T++;
                            }
                        }
                        j=j+JK+1;//退出当前的括号
                    }
                }
            }
            int pwd=se;//用于统计'.'符号的个数
            for(int i=0;i<se;i++)
            {
                pwd=0;
                for(int j=0;j<se;j++)
                {
                    if(save[i][j]=='.')
                    {
                        pwd++;
                    }
                }
                if(pwd==se)
                {
                    pwd=i;
                    break;
                }
            }
            //System.out.println(pwd);
            System.out.println("第一行数据:");
            A=0;
            for(int i=0;i<number2;i++)
            {
                for(int j=0;j<se;j++)
                {
                    if((sdf2[j]==F[i]&&j-1>=0&&sdf2[j-1]!='¬')||(sdf2[j]==F[i]&&j==0))
                    {
                        System.out.print(F[i]+" ");
                    }
                }
            }
            D=0;
            for(int i=0;i<number2;i++)
            {
                for(int j=0;j<se;j++)
                {
                    if(sdf2[j]==F[i]&&j-1>=0&&sdf2[j-1]=='¬')
                    {
                        System.out.print("¬"+F1[i]+" ");
                    }
                }
            }
            System.out.println();
            for(int i=0;i<pwd;i++)
            {
                System.out.println(save[i]);
            }
            System.out.println("第一行以下数据:");
            for(int i=0;i<str;i++)
            {
                for(int j=0;j<number2;j++)
                {
                    for(int k=0;k<se;k++)
                    {
                        if(sdf2[k]==F[j]&&k-1>=0&&sdf2[k-1]!='¬'||(sdf2[k]==F[j]&&k==0))
                        {
                            System.out.print(ste[j][i]+" ");
                        }
                    }
                }
                for(int j=0;j<number2;j++)
                {
                    for(int k=0;k<se;k++)
                    {
                        if(sdf2[k]==F[j]&&k-1>=0&&sdf2[k-1]=='¬')
                        {
                            System.out.print(ste1[j][i]+" ");
                        }
                    }
                }
                for(int j=0;j<pwd;j++)
                {
                    System.out.print(save1[j][i]+" ");
                }
                System.out.println();
            }
            int RT=0;
            for(int i=0;i<str;i++)
            {
                if(save1[pwd-1][i]==0)
                {
                    RT++;
                }
            }
            if(RT==str)
            {
                System.out.println("该表达式为永假式");
            }
            else
            if(RT==0)
            {
                System.out.println("该表达式为永真式");
            }
            else
            {
                System.out.println("该表达式为可满足式");
            }
        }
    }
}

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡闹的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值