基于Java的卡诺图化简
来源:互联网 发布:pla 算法初始化 编辑:程序博客网 时间:2024/04/24 11:52
博主分析了最小项化简原理
得出不依赖于卡诺图图像的化简方式
根据卡诺图得出表达式,对表达式进行队列优先遍历两两进行化简
1.先给出核心匹配段,对ArrayList数组中的内容判断是否可化简
//传入两个字符串对其进行是否仅有一个变量不同的字符串//如果有返回这两个字符串化简的新字符串//例 ABCd+ABCD=ABCpublic class pipei { public String match(String mstr, String nstr) { String s = "";//存放成功匹配后化简的字符串 int rem = 0;//记录差异字符的位置 int sum = 0;//记录差异字符的个数,仅有差异为1才继续进行 String[] m = mstr.split(""); String[] n = nstr.split(""); for (int i = 0; i < nstr.length(); i++) { if (!m[i].equals(n[i])) { sum = sum + 1; rem = i; } } //将成功匹配的新字符串产生作为返回值传出 if (sum == 1) { for (int i = 0; i < nstr.length(); i++) { if (i != rem) { s = s + m[i]; } } } rem = 0; sum = 0; return s; }}
2.主函数应用
import java.util.ArrayList;//应用ArrayList动态数组方便元素的提取删除import java.util.Random;//随机数产生卡诺图方便程序测试public class Main { public static void main(String[] args) { // TODO 自动生成的方法存根 ArrayList list = new ArrayList(); pipei s1 = new pipei(); int[][] numbers = new int[4][4]; Random random = new Random(); String result = ""; int num; for (int i = 0; i < 4; i++) {//随机产生4*4的01矩阵 for (int j = 0; j < 4; j++) { num = random.nextInt(10); if (num > 4) { numbers[i][j] = 1; } else { numbers[i][j] = 0; } } } //根据得到的01矩阵和下标将数组中为1的元素得到对应的项 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { String s = ""; if (numbers[i][j] == 1) { if (i == 0) { s = s + "AB"; } else if (i == 1) { s = s + "1B"; } else if (i == 2) { s = s + "A2"; } else if (i == 3) { s = s + "12"; } if (j == 0) { s = s + "CD"; } else if (j == 1) { s = s + "3D"; } else if (j == 2) { s = s + "C4"; } else if (j == 3) { s = s + "34"; } System.out.println(s); list.add(s); } } } int remperi = 0; String remi = "", remp = "";//记录要删除的两个项 for (int j = 0; j < 4; j++) { for (int i = 0; i < list.size(); i++) { if (i >= list.size()) { break; } for (int p = i + 1; p < list.size(); p++) { if (p >= list.size()) { break; } if (list.size() <= 2) { break; } //匹配到两个合适的字符串将其删除,合并的字符串填入ArrayList if (!s1.match(list.get(i).toString(), list.get(p).toString()).equals("")) { list.add(s1.match(list.get(i).toString(), list.get(p).toString())); remi = list.get(i).toString(); remp = list.get(p).toString(); if (i != 0) { i--; } break; } else { remi = ""; remp = ""; } } if (!remi.equals("")) { list.remove(remp);//对字符串进行删除(下标操作困难) list.remove(remi); } } } //根据最终化简的ArrayList得出最简最小项 for (int i = 0; i < list.size(); i++) { result = result + list.get(i); if (i != list.size() - 1) { result = result + "+"; } } System.out.println(result); }}
小白第一次发博客,求顶,有化简卡诺图需求的朋友欢迎参考
对于确定的卡诺图将随机生成矩阵手动赋值即可
阅读全文
0 0
- 基于Java的卡诺图化简
- 卡诺图化简
- 卡诺图化简
- 卡诺图和Apple Watch的第一次亲密接触
- [Python] 逻辑表达式的真值表以及卡诺图生成
- 卡诺图
- 卡诺图
- 卡诺图
- 卡诺图 最大项
- 卡诺图学习笔记
- 卡诺图化简法详细介绍
- 《数字技术》连载25: 第3章 逻辑设计初步 第5节 卡诺图,逻辑式的简化
- 基于Java的网络技术
- 基于JAVA的万年历
- 基于Java的拼图游戏
- 基于Java的ProtocolBuffer
- 基于Java的Web应用
- 基于Java的操作系统发展史!
- idea Commit Changes Dialog local changes refresh
- 链队的一些操作
- C++构造函数与析构函数(一)
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 2 Week 1 3.Gradient Checking
- 基于神经网络的实体识别和关系抽取联合学习 | PaperWeekly #54
- 基于Java的卡诺图化简
- SQL:DML&DDL
- 解决SwipeRefreshLayout下拉刷新与SwipeMenuListView的冲突
- 间断初值双曲守恒问题的Lax-Friedrichs和后向欧拉数值解法
- Java Web后端--入职技能任务单(新增插件信息)八
- Vue项目启动时报 Error: spawn EACCES
- 1.SC命令——图形缩放
- 算法分析---回文数判断
- qnx efs文件系统binary修复