面对对象程序设计--前三次总结
PTA大作业2--7-2
题目集7-2的题目是串口字符解析,RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。
题目要求:过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error
整体思路介绍
- 该题目要求先判断输入的字符串长度是否小于11,如诺是,则输出"null data"
- 再则判断结束符是不是为1,如果不是1的话·,则输出“validate error”,如诺为1,则进行下一步操作。
- 再跟据二进制来判断奇偶效验是不是正确,错误的话,则输出“parity check error”。
- 如果都不合格,那就输出“validate error”。
度量分析
圈复杂度分析使用SourceMonitor软件
核心代码分析
判断长度是否大于11

前标计算方法:

判断结束符和二进制算出来的奇偶效验是否正确:


判断之后进行输出:

每十个进行判断:
![]()
优点
- 判断条件清晰,可修改性高。
- 把判断输出放一起,看起来比较易懂。
缺点
- if-else语句用的太多了,导致太复杂。
PTA大作业3--7-1
题目集7-1的题目是:点线形系列1-计算两点之间的距离 。
题目要求:4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。
整体思路介绍
1.该题目要求输入四个数,也就是两个点的坐标;
2.判断输入是否合法,不合法则输出"Wrong Format"。
3.诺合法,判断输入的坐标点的个数,如果超过两个,输出“wrong number of points”。
4.通过两坐标点之间的计算公式,计算输入的两个坐标点之间的距离公式。
度量分析
圈复杂度分析使用SourceMonitor软件
核心代码:
空格分离
String[] s2=s1.split(" ");
判断合法:
for(int i=0;i<s2.length;i++)
{
String[] s3=s2[i].split(",");//逗号分离
if(s3.length>2)
flag=1;
for(int j=0;j<s3.length;j++)
{
index=0;
for(int k=0;k<s3[j].length();k++)
{
if(s3[j].charAt(k)=='.'){
index++;
if(s3[j].length()==k+1)
flag=1;
}
}
if(index>=2){
flag=1;
}
if(s3[j].charAt(0)=='-'||s3[j].charAt(0)=='+')
{
if(s3[j].charAt(1)<'0'||s3[j].charAt(1)>'9')
flag=1;
if(s3[j].charAt(1)=='0'&&s3[j].charAt(2)!='.')
flag=1;
}
if(s3[j].charAt(0)=='0'&&s3[j].charAt(1)!='.')
flag=1;
}
}
字符型转换为浮点型
double[] a=new double[4];
for(int i=0;i<s2.length;i++){
String[] s3=s2[i].split(",");
if(i==0){
for(int j=0;j<4;j++){
a[j]=Double.parseDouble(s3[i]);
}
}
if(i==1){
for(int j=2;j<4;j++){
a[j]=Double.parseDouble(s3[i]);
}
}
}
判断合法和长度后输出
if(flag==1){
System.out.printf("Wrong Format");
}
else if(s2[].length>2){
System.out.printf("wrong number of points");
}
合法并且长度对之后,赋值计算输出:
else{
double x1=a[0];
double y1=a[1];
double x2=a[2];
double y2=a[3];
double distance=Math.sqrt(((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
System.out.println(distance);
}
PTA大作业2--7-2
题目集7-2的题目是点线形系列2-线的计算,
题目要求:用户输入一组选项和数据,进行与直线有关的计算。选项包括:
1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。
整体思路介绍
- 五种情况,每种情况做一次判断
度量分析
圈复杂度分析使用SourceMonitor软件
核心代码
坐标分离

第一种

第二种:

第三种:


缺点:很多if-else语句;然后很多地方不易理解,毕竟代码不全
PTA大作业2--7-3
题目集7-3的题目是点线形系列3-三角形的计算
题目需求:用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
1:输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false,两个结果之间以一个英文空格符分隔。
2:输入三个点坐标,输出周长、面积、重心坐标,三个参数之间以一个英文空格分隔,坐标之间以英文","分隔。
3:输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false),以一个英文空格分隔,
4:输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"
5:输入四个点坐标,输出第一个是否在后三个点所构成的三角形的内部(输出in the triangle/outof triangle)。
必须使用射线法,原理:由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"
整体思路介绍
- 五种情况,每种情况做一次判断
度量分析
圈复杂度分析使用SourceMonitor软件
核心代码
坐标分离

判断

第三题没做出来

浙公网安备 33010602011771号