题目集1~3的总结性Blog
(1) 前言:
(1) 难度分析:这三次大作业题目难度是逐渐增加的,特别是第二次的第二题和第三次作业,这几个题我都没有拿到满分,总是有些测试点过不去。第三次作业难度明显有很大的提升,要达到及格都不容易。
(2) 题量分析:题量的话第二次的题量是最少的,第一次的题量多一些,但是题目简单。第三次作业题目只有三题,不过因为难度提升了不少,所以要花的时间是最多的。正因如此,我没有给第三次作业分配足够的时间,导致写的非常仓促,是为了过及格线而写,写的代码问题也比较粗糙,题目中的问题也没有全部解决。
(3) 知识点总结:选择结构应用、字符型数据与数值型数据之间的类型转换、一维数组、方法的定义与调用、循环结构、正则表达式。
(2)设计与分析:
题目集二 --(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
源码:


分析:
题目分析:刚看到这道题目的时候完全看不懂 ,后来看了很多遍才真正明白题目的意思,就是要判断是否符合如下格式:
N:0-[][][][] [][][][]-{}-1
{}-中是奇偶校验;和为偶数为 1;和为奇数 0;
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若数据的结束符不为1,则输出“validate error”。
若数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
代码分析:
先将输入的字符串转换成字符类型,存到char类型的ch数组中,然后判断ch中是否存在'0',如果存在0,则HaveZero = 1;
然后判断长度是否大于11和是否存在0;
如果不满足输出 "null data"。

如果满足,则进入for循环中,判断0以后是否还有11位数字;
如果是,则从 str 中截取10位存到 str1 当中
进行求和操作,来判断奇偶性;
设置一个布尔值parity来判断前10位数是否符合条件

前10位判断合格后,判断最后一位结束符是否正确;
如果为1,输出结果;
如果为0,输出“validate error”;
如果结束符和奇偶校验均不合格;
输出“validate error”;
如果只有奇偶校验错误;
输出“parity check error”;
题目集三 --(7-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.4142135623730951
源码:


代码分析:
首先运用正则表达式将输入的字符串去掉 ',' 和 空格后存入数组arr1;
并将处理后的数据转化成double类型的数据存入数组arr2;
如果输入的数字不是四个;
输出“wrong number of points”。

如果输入数据不符合固定格式
输出“Wrong Format” 。
将输入的两个坐标传入point类当中并返回 x,y;

定义了一个 dis 方法计算距离;
同时输出距离;

题目集三 --(7-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"。
输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。
例如:1:0,0 1,1
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
不论哪个选项,如果格式、点数量都符合要求,但构成任一条线的两个点坐标重合,输出"points coincide",
源码:




代码分析:
和上一题类似;
首先运用正则表达式将输入的字符串去掉 ',' ':' 和 空格后存入数组arr1;
并将处理后的数据转化成double类型的数据存入数组arr2;

输入格式检查;
如果选择的序号与输入的点的数量不符合,或者选择的序号大于5;
输出“Wrong Format”。

创建五个方法对应五个要求;
将数据传入对应的方法中;

选项 1 对应方法p1;
计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
若两个点坐标重合,输出"points coincide"。

选项2 对应方法p2;
输入三个点坐标,输出第一个点与另外两点连线的垂直距离。

选项3 对应方法p3;
输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
利用斜率判断;
注意考虑斜率不存在的情况。

选项4 对应方法p4;
输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false。
利用斜率判断;

选项5 对应方法p5;
输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false);
判断结果与坐标之间以一个英文空格分隔;
若两条线平行,则输出"is parallel lines,have no intersection point"。
题目集三 --(7-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"
输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。
输出格式:
基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
如果输入的三个点无法构成三角形,输出"data error"。
注意:输出的数据若小数点后超过6位,只保留小数点后6位,多余部分采用四舍五入规则进到最低位。小数点后若不足6位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333333,1.0按格式输出为1.0
选项4中所输入线的两个点坐标重合,输出"points coincide",





代码分析:
前几步和上一题类似就不再赘述了,直接看方法;
选项1 对应方法p1;
输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false。
先求出三角形三条边长,判断能否构成三角形,
如果能构成三角形再通过比较边长判断、等腰、等边;

选项2 对应方法p2;
输入三个点坐标,输出周长、面积、重心坐标;
直接代公式。
注意:小数点保留六位;
用如下方法判断;
1 if((s*1e6)%10 != 0)//判断小数超过六位;面积 2 System.out.printf("%.6f ",s); 3 else 4 System.out.print(s+" ");

选项3 对应方法p3;
输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false)
直接上公式;

选项4 对应方法p4;
输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"。
这个有点难,我只能判断是否构成三角形,剩下的再慢慢研究吧。

选项5 对应方法p5;
这个属实不会,换成数学题我都写不出来,不会用射线法。
源码分析完毕。
(3)采坑心得:
出现的问题有点多,我列举几个经典的。
(1)第三次作业7-3

这个点不知道怎么实现,后来找到了下面的方法:
1 if((s*1e6)%10 != 0)//判断小数超过六位;面积 2 System.out.printf("%.6f ",s); 3 else 4 System.out.print(s+" ");
(2)第三次作业7-1
不知道怎么去掉输入中的逗号和空格,弄了一晚上才明白用正则表达式:
//输入字符
String s = input.nextLine();
String[] arr1 = s.split("\\,|\\ ");
double[] arr2 = new double [arr1.length];
(3)第三次作业7-1
字符类型转换成double类型,这一步很关键:
1 arr2[i] = Double.parseDouble(arr1[i]);
(4)第三次作业7-3
不知道怎么用三边长判断钝角、锐角、直角:
1 //钝角 2 if(a * a + b * b < c * c || a * a + c * c < b * b || b * b + c * c < a * a){ 3 System.out.print("true"+" "+"false"+" "+"false"); 4 }else if(a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)//直角 5 System.out.print("false"+" "+"true"+" "+"false"); 6 else //锐角 7 System.out.print("false"+" "+"false"+" "+"true"); 8 }
(5)第二次作业7-2
不知道如何取指定位置的字符串
1 public class RunoobTest { 2 public static void main(String args[]) { 3 String Str = new String("This is text"); 4 5 System.out.print("返回值 :" ); 6 System.out.println(Str.substring(4) ); 7 8 System.out.print("返回值 :" ); 9 System.out.println(Str.substring(4, 10) ); 10 } 11 }
(4)改进建议:
我这次用的是方法来写的第三次作业的代码,可以多用类来增强代码的可读性,充分发挥Java的优势,用类代码也更加简洁,可提高代码的复用性
(5)总结:
(1)下次要提前开始写大作业,不能卡着时间点,这样才有更多的时间去修改代码,去思考难的问题,提升解决问题的能力。
(2)要提升自学能力和学习能力,提高学习的主动性,很多问题在网上都能找到解决方法,解决问题的过程就是学习的过程。
(3)建议:大作业结束后老师能把作业代码发出来供大家学习,通过对比就能更好的发现问题,有模板也有利于提升我们代码的规范性。
(4)我对于多类还有许多不懂的地方,今后要加强这方面的学习。

浙公网安备 33010602011771号