资源简介
* 显示合适公式的真值表
* 提供将一个中缀合适公式的真值表输出到某一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
相关资源
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
- [免费]java实现有障碍物的贪吃蛇游戏
评论
共有 条评论