资源简介
* 显示合适公式的真值表
* 提供将一个中缀合适公式的真值表输出到某一PrintStream流中的功能
* 以单个大写字母表示变量(支持26个变量)
* 以字符0或者1表示值
* 以 ~ ^ & > - 分别表示 非 析取 合取 条件 双条件 连接词
* 支持 ( )(括号)
* 如果公式中有错误将不会输入真值表(将会输出错误信息)
说明:以 ~ ^ & > - 分别表示 非 析取 合取 条件 双条件 连接词
以单个大写字母表示变量(支持26个变量)
以字符0或者1表示值,式子中的T与F
支持 ( )(括号)
如果公式中有错误将不会输入真值表(将会输出错误信息)
注意:输出的结果会同时显示到屏幕与该程序的同目录下的“真值表结果.txt”文件中
直接按回车键(输入为空)则会退出程序
例如:输入 A^B-(1&C)则会显示
该合适公式是 A^B-(1&C)
A B C Key
0 0 0 0
1 0 0 0
0 1 0 0
1 1 0 1
0 0 1 0
1 0 1 0
0 1 1 0
1 1 1 1
代码片段和文件信息
/**
* 显示合适公式的真值表
* chishaxie
*/
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Stack;
/**
* 真值表类(abstract抽象类)
* 提供将一个中缀合适公式的真值表输出到某一PrintStream流中的功能
* 以单个大写字母表示变量(支持26个变量)
* 以字符0或者1表示值
* 以 ~ ^ & > - 分别表示 非 析取 合取 条件 双条件 连接词
* 支持 ( )(括号)
* 如果公式中有错误将不会输入真值表(将会输出错误信息)
* @author chishaxie
*/
abstract class TruthTable{
/**
* 逻辑连接词优先级判断
* 定义左括号和栈底字符的优先级为0
* 定义条件与双条件运算的优先级为1
* 定义合取运算的优先级为2
* 定义析取运算的优先级为3
* 定义非运算的优先级为4
* @param op 连接词(char 字符形式)
* @return 表示优先级的数字(0~4)
*/
private static int Precedence(char op)
{
switch (op) {
case ‘-‘:
case ‘>‘:
return 1;
case ‘&‘:
return 2;
case ‘^‘:
return 3;
case ‘~‘:
return 4;
case ‘(‘:
case ‘=‘:
default:
return 0;
}
}
/**
* 将合适公式的中缀形式转化为后缀形式
* 支持的字符有 大写字母(表示变量) ~ ^ & > -(表示连接词) ( )(括号)
* @param str 适合公式的中缀形式(String字符串形式,字符串应该以=结尾)
* @return 适合公式的后缀形式(String字符串形式,字符串以=结尾)
* @throws Exception 合适公式中含有错误时
*/
private static String toSuffix(String str) throws Exception {
StringBuffer strBuf = new StringBuffer();
Stack stack = new Stack();
stack.push(‘=‘);//压入栈底字符
int i = 0;
char ch = str.charAt(i);
while (ch!=‘=‘) {
if (ch == ‘ ‘)
;//忽略空格
else if (ch == ‘(‘)
stack.push(‘(‘);
else if (ch == ‘)‘) {
while (stack.peek() != ‘(‘) {
if (stack.peek() == ‘=‘)
throw new Exception(“括号不匹配(可能是缺少“(”)“);
strBuf.append(stack.pop());
}
stack.pop();
} else if (ch == ‘^‘ || ch == ‘&‘ || ch == ‘~‘ || ch == ‘-‘ || ch == ‘>‘) {
char w = stack.peek();
while (Precedence(w) >= Precedence(ch)) {
strBuf.append(w);
stack.pop();
w = stack.peek();
}
stack.push(ch);
} else {
if (!((ch >= ‘A‘ && ch <= ‘Z‘) || ch==‘0‘ || ch==‘1‘))
throw new Exception(“出现不支持的符号(可能是括号等出现全角模式)“);
strBuf.append(ch);
}
ch=str.charAt(++i);
}
ch = stack.pop();
while (ch != ‘=‘) {
if (ch == ‘(‘)
throw new Exception(“括号不匹配(可能是缺少“)”)“);
else {
strBuf.append(ch);
ch = stack.pop();
}
}
strBuf.append(‘=‘);
//System.out.println(strBuf);
return strBuf.toString();
}
/**
* 计算出适合公式的值(后缀形式)
* 以字符0或者1表示变量的值
* 以 ~ ^ & > - 分别表示 非 析取 合取 条件 双条件 连接词
* @param str 后缀形式的合适公式(String字符串形式,需要以=结尾)
* @return 计算的结果(boolean形式,false表示0,ture表示1)
* @throws Exception 合适公式中含有错误时
*/
private static boolean runSuffix(String str) throws Exception
{
Stack stack=new Stack();
int i=0;
Boolean num1num2;
while(str.charAt(i)!=‘=‘)
{
if(str.charAt(i)==‘0‘)
stack.push(false);
else if(str.charAt(i)==‘1‘)
stack.push(true);
else if(str.charAt(i)==‘^‘)
{
if(stack.size()<2)
throw new Exception(“合适公式出现错误(可能是缺少变量)“);
num1=stack.pop();
num2=stack.pop();
if(num1.equals(true)
- 上一篇:数据库课程设计(教学管理系统)( java实现)
- 下一篇:FlappyBird
相关资源
-
Android ja
vasc ript打开webview图片、支 - 基于Java的网络教学系统
- 超市进销存系统需求分析与设计实现
- JAVA3D官方
- 基于java的汽车租赁管理系统
- 丰巢科技Java面试题
- JAVA mysql web 图书管理系统
- java操作Excel需要的jar包
- Java实现拼图游戏源码
- java进销存管理系统源码
- Java+GUI编程实现“21点”游戏(含文档
- 2019年最新版修订版Java程序员面试宝典
- 2019年最新版修订版Java程序员面试宝典
- 精通Java并发编程第2版.zip
- kafka java依赖包
- Maven: The Definitive Guide pdf
- Jsp仿淘宝网项目源代码
- 杨晓峰-java核心技术36讲(完结.pdf
- java源代码,java源代码
- Java代码 MySql导出到SqlLite
- JAVA商品库存管理系统
- jsp+servlet+javabean实现数据库增删改查操
- JAVAEE6 API 文档
- java开发的电影院管理系统
- Lucene搜索引擎 JSP + JAVA
- Java 停车场管理系统_JAVA___Sevrlet停车管
- Java开发的实验教学资源管理系统
- 一个用Myeclipse做的java的博客管理系统
- Java 3D 开发包
- 物业管理系统完整版带数据库文件
评论
共有 条评论