利用真值表法求取主析取范式以及主合取范式
-
内容:
编程实现用真值表法求取含n个变元的合式公式所对应的主析取范式和主合取范式。
要求:
能够列出合式公式的真值表并给出相应主析取和主合取范式。 -
实验代码:
import jdk.swing.interop.SwingInterOpUtils;
import java.util.*;
import java.util.regex.Pattern;
public class Truetable {
private static HashMap<Character,Boolean> map = new HashMap<>();//用键值对存放命题的真假
private static List<Character> Alpha = new ArrayList<>();//命题字符的列表
private static int alphaSize = 0;
private static String infixSentence; //中缀表达式
private static char[] suffixSentence = new char[100];//后缀表达式
private static Boolean res;
private static List<Boolean[]> trueList = new ArrayList<>(); //真值序列
private static List<Boolean[]> falseList = new ArrayList<>();//假值序列
public static void main(String[] args) {
init();
Scanner scanner = new Scanner(System.in);
String inputAlpha;
System.out.println("请输入命题个数");
alphaSize = scanner.nextInt();
System.out.println("请输入合式公式(英文输入):析取:“|” 合取:“&” 非:“!” 单条件运算符:“->” 双条件运算:“<>”");
do {
scanner.nextLine();
inputAlpha = scanner.nextLine();
scanner.close();
} while (!Pattern.matches("^[A-Za-z-><!|&()]+$", inputAlpha));//判断是是否符合输入要求
StringBuilder sb = new StringBuilder(inputAlpha);
infixSentence = standardExpression(inputAlpha);
infixToSuffix(infixSentence);//调用中缀转换为后缀函数
for (int i = 0; i < Alpha.size(); i++) {
System.out.print(Alpha.get(i) + "\t");
}
System.out.println(inputAlpha);
printTrueTable(0);//调用打印真值表函数
printAns();//打印结果
}
private static void printAns() {
disjunctiveForm();//主析取范式
conjunctiveForm();//主合取范式
}
private static void conjunctiveForm() {
int i = 0, j = 0;
int k;
String ans = "";
for (Boolean[] falsearray : falseList) {
StringBuilder stringBuilder = new StringBuilder(ans);
stringBuilder.append