题目集1~3的总结性Blog

 (1) 前言:

     (1) 难度分析:这三次大作业题目难度是逐渐增加的,特别是第二次的第二题和第三次作业,这几个题我都没有拿到满分,总是有些测试点过不去。第三次作业难度明显有很大的提升,要达到及格都不容易。

      (2) 题量分析:题量的话第二次的题量是最少的,第一次的题量多一些,但是题目简单。第三次作业题目只有三题,不过因为难度提升了不少,所以要花的时间是最多的。正因如此,我没有给第三次作业分配足够的时间,导致写的非常仓促,是为了过及格线而写,写的代码问题也比较粗糙,题目中的问题也没有全部解决。

      (3) 知识点总结:选择结构应用、字符型数据与数值型数据之间的类型转换、一维数组、方法的定义与调用、循环结构、正则表达式。

 

(2)设计与分析:

 题目集二 --(7-2)

 

7-2 串口字符解析 (40 分)
 

 

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)

7-1 点线形系列1-计算两点之间的距离 (10 分)
 

输入连个点的坐标,计算两点之间的距离

输入格式:

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)

7-2 点线形系列2-线的计算 (42 分)
 

用户输入一组选项和数据,进行与直线有关的计算。选项包括:
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)

7-3 点线形系列3-三角形的计算 (48 分)
 

用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
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)我对于多类还有许多不懂的地方,今后要加强这方面的学习。

 

posted @ 2022-04-09 19:33  洛克希德·马丁  阅读(117)  评论(0)    收藏  举报