-
前言:
-
设计与分析:
-
第二次作业7-2
-
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。 输入格式: 由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111 输出格式: 过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。 如有多个数据,每个数据单独一行显示。 若数据不足11位或者输入数据全1没有起始位,则输出"null data", 若某个数据的结束符不为1,则输出“validate error”。 若某个数据奇偶校验错误,则输出“parity check error”。 若数据结束符和奇偶校验均不合格,输出“validate error”。 如:11011或11111111111111111。 例如: 1:11101011 2:01001101 3:validate error
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String s = input.nextLine(); if(s.length() < 11 || s.matches("1+")) System.out.println("null data"); else { int count = 1; for(int i = s.indexOf('0');s.substring(i).matches(".*0+.*") && i + 10 < s.length();i = s.indexOf('0',i) + 11) { boolean end = (s.charAt(s.indexOf('0',i) + 10) == '1'); int count1 = 0; boolean parityCheck = true; for(int j = s.indexOf('0',i) + 1;j <= s.indexOf('0',i) + 9;j++) { if(s.charAt(j) == '1') count1++; parityCheck = (count1 % 2 == 1); } System.out.print(count++ + ":"); if(end && parityCheck) System.out.println(s.substring(s.indexOf('0',i) + 1,s.indexOf('0',i) + 9)); else if(!end && !parityCheck) System.out.println("validate error"); else if(!end && parityCheck) System.out.println("validate error"); else if(end && !parityCheck) System.out.println("parity check error"); } } } }
这一次作业完全按照面向过程方法实现,主要是对正则表达式的应用和String类方法的应用,仅有一个主类和一个主方法,因为整体难度较为简单,所以没有采用面向对象思想进行编程。但是从ScoureMonitor生成结果来看应该对代码进行一定程度的拆分以减少复杂度
-
-
第三次作业7-1
-
正式进入面向对象程序设计的第一道题,
-
-
第三次作业7-2
-
-
-
第三次作业7-3
-
-
踩坑心得:
-
改进建议:
-
总结:
标签:总结,题目,String,indexOf,作业,奇偶校验,error,数据 From: https://www.cnblogs.com/Zexu3366/p/16749276.html