1987WEB视界-分享互联网热点话题和事件

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

BLOG-2

1987web2024-03-25WEB开发37
BLOG-2(1)前言:总结之前所涉及到的知识点、题量、难度等情况题目集4:知识点:类与对象、字符串方法调用、正则表达式题量:多难度:难题目集5:知识点:类与对

BLOG-2 (1)前言: 总结之前所涉及到的知识点、题量、难度等情况 题目集4:知识点:类与对象、字符串方法调用、正则表达式 题量:多 难度:难 题目集5:知识点:类与对象、字符串方法调用、正则表达式 题量:多 难度:难 期中考试:知识点:类设计、继承与多态、容器类 题量:少 难度:低 (2)设计 ...

BLOG-2

(1)前言

总结之前所涉及到的知识点、题量、难度等情况

题目集4:知识点:类与对象、字符串方法调用、正则表达式、四边形相关知识 题量:中 难度:难

题目集5:知识点:类与对象、字符串方法调用、正则表达式、五边形相关知识 题量:多 难度:难

期中考试:知识点:类设计、继承与多态、容器类 题量:少 难度:低

(2)设计与分析

重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),本次Blog必须分析PTA中的图形类设计的题目、超星中链表类练习题目以及期中考试的三道题目

PTA题目集4(四边形)

7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)

‘蛟龙’号是我国载人深潜发展历程中的一个重要里程碑。它不只是一个深海装备,更代表了一种精神,一种不畏艰险、赶超世界的精神,它是中华民族进军深海的号角。

了解蛟龙号”载人深潜器“的骄人业绩,为我国海底载人科学研究和资源勘探能力达到国际领先水平而自豪,小伙伴们与祖国同呼吸、共命运,一定要学好科学文化知识、提高个人能力,增强创新意识,做事精益求精,立科技报国之志!

请编写程序,实现如下功能:读入关于蛟龙号载人潜水器探测数据的多行字符串,从给定的信息找出数字字符,输出每行的数字之和。

提示若输入为“2012年2月”,则该行的输出为:2014。若干个连续的数字字符作为一个整体,以十进制形式相加。

输入格式:

读入关于蛟龙号载人潜水器探测数据的多行字符串,每行字符不超过80个字符。

以"end"结束。

输出格式:

与输入行相对应的各个整数之和。

我的代码:

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

这题需要使用到Pattern类和Matcher类,需要掌握Pattern和Matcher类。

7-2 点线形系列4-凸四边形的计算

用户输入一组选项和数据,进行与四边形有关的计算。以下四边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。选项包括:1:输入四个点坐标,判断是否是四边形、平行四边形,判断结果输出true/false,结果之间以一个英文空格符分隔。2:输入四个点坐标,判断是否是菱形、矩形、正方形,判断结果输出true/false,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"3:输入四个点坐标,判断是凹四边形(false)还是凸四边形(true),输出四边形周长、面积,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"4:输入六个点坐标,前两个点构成一条直线,后四个点构成一个四边形或三角形,输出直线与四边形(也可能是三角形)相交的交点数量。如果交点有两个,再按面积从小到大输出四边形(或三角形)被直线分割成两部分的面积(不换行)。若直线与四边形或三角形的一条边线重合,输出"The line is coincide with one of the lines"。若后四个点不符合四边形或三角形的输入,输出"not a quadrilateral or triangle"。后四个点构成三角形的情况:假设三角形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:1)符合要求的输入:顶点重复或者z与xy都相邻,如x x y s、x z y s、x y x s、s x y y。此时去除冗余点,保留一个x、一个y。2) 不符合要求的输入:z 不与xy都相邻,如z x y s、x z s y、x s z y5:输入五个点坐标,输出第一个是否在后四个点所构成的四边形(限定为凸四边形,不考虑凹四边形)或三角形(判定方法见选项4)的内部(若是四边形输出in the quadrilateral/outof the quadrilateral,若是三角形输出in the triangle/outof the triangle)。如果点在多边形的某条边上,输出"on the triangle或者on the quadrilateral"。若后四个点不符合四边形或三角形,输出"not a quadrilateral or triangle"。

输入格式:

基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。

输出格式:

基本输出格式见每种选项的描述。异常情况输出:如果不符合基本格式,输出"Wrong Format"。如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。注意:输出的数据若小数点后超过3位,只保留小数点后3位,多余部分采用四舍五入规则进到最低位。小数点后若不足3位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333,1.0按格式输出为1.0

选项1、2、3中,若四边形四个点中有重合点,输出"points coincide"。选项4中,若前两个输入线的点重合,输出"points coincide"。

我的部分核心源码

1staticpoint A;2staticpoint B;3staticpoint C;4staticpoint D;5staticpoint E;6staticpoint F;7staticline AB;8staticline BC;9staticline CD;10staticline DA;11staticline AC;12staticline BD;13staticline EF;1415publicstaticbooleanisTri()//四点是否构成为三角形16{17return(!B.twoCoin(D)&&!BD.online(A)&&!BD.online(C)&&A.twoCoin(C))||(!A.twoCoin(C)&&!AC.online(B)&&!AC.online(D)&&B.twoCoin(D))||(!B.twoCoin(D)&&BD.OnLineSegment(A)&&!BD.online(C))||(!A.twoCoin(C)&&AC.OnLineSegment(B)&&!AC.online(D))||(!B.twoCoin(D)&&BD.OnLineSegment(C)&&!BD.online(A))||(!A.twoCoin(C)&&AC.OnLineSegment(D)&&!AC.online(B));18}192021publicstaticbooleanisRec()//是否为矩形22{23returnisPara()&&A.twolength(C)==B.twolength(D);24}2526publicstaticdouble[]splitDate(Stringa)//String型坐标转为double型坐标27{28intc=0,i=0;29Patternp=Pattern.compile("(-?\\d*)\\.?\\d+");//正则表达式30Matcherm=p.matcher(a);3132while(m.find())33c++;3435double[]array=newdouble[c-1];36Matcherm2=p.matcher(a);3738while(m2.find())39{40if(i>0)41array[i-1]=Double.parseDouble(m2.group(0));42i++;43}44returnarray;45}4647publicstaticbooleanisPara()//是否为平行四边形48{49returnisQuad()&&AB.Slope().equals(CD.Slope())&&A.twolength(B)==C.twolength(D)&&BC.Slope().equals(DA.Slope())&&B.twolength(C)==D.twolength(A);50}515253publicstaticbooleanisDia()//是否为菱形54{55returnisPara()&&A.twolength(B)==B.twolength(C);56}5758publicstaticvoiddividedArea(line L,point p1,point p2,point p3)//直线切三角形交点个数及切割面积59{60line l12=newline(p1,p2);61line l23=newline(p2,p3);62line l13=newline(p1,p3);6364if(L.threeSameplace(p1,p2,p3))65System.out.println(0);66elseif((L.online(p1)&&L.twoSameplace(p2,p3))||(L.online(p2)&&L.twoSameplace(p1,p3))||(L.online(p3)&&L.twoSameplace(p1,p2)))67System.out.println(1);68elseif(L.firstPointelseTwoPoints(p1,p2,p3))69dateCompare(triArea(p1,L.twoInter(l12),L.twoInter(l13)),triArea(p1,p2,p3)-triArea(p1,L.twoInter(l12),L.twoInter(l13)));70elseif(L.firstPointelseTwoPoints(p2,p1,p3))71dateCompare(triArea(p2,L.twoInter(l12),L.twoInter(l23)),triArea(p1,p2,p3)-triArea(p2,L.twoInter(l12),L.twoInter(l23)));72elseif(L.firstPointelseTwoPoints(p3,p1,p2))73dateCompare(triArea(p3,L.twoInter(l13),L.twoInter(l23)),triArea(p1,p2,p3)-triArea(p3,L.twoInter(l13),L.twoInter(l23)));74}757677publicstaticbooleanisQuad()//是否为四边形78{79return!AB.online(C)&&!AB.online(D)&&!BC.online(A)&&!BC.online(D)&&!CD.online(B)&&!CD.online(A)&&!DA.online(B)&&!DA.online(C)&&((AC.twoPoint(B,D)&&BD.twoPoint(A,C)&&!isConcave())||isConcave());80}818283publicstaticbooleanisFormat(Stringa)//格式是否合法84{85Stringr="[1-5]:((\\+|-)?(0(\\.0+)?|[1-9]\\d*|[1-9]\\d*\\.\\d+|0\\.\\d*[1-9]\\d*),(\\+|-)?(0(\\.0+)?|[1-9]\\d*|[1-9]\\d*\\.\\d+|0\\.\\d*[1-9]\\d*) )*((\\+|-)?(0(\\.0+)?|[1-9]\\d*|[1-9]\\d*\\.\\d+|0\\.\\d*[1-9]\\d*),(\\+|-)?(0(\\.0+)?|[1-9]\\d*|[1-9]\\d*\\.\\d+|0\\.\\d*[1-9]\\d*)( )?)+";86booleand=a.matches(r);87returnd;88}8990publicstaticbooleanisInside(point a,point a1,point a2,point a3)//点是否在三角形内91{92doublex=a.getx(),y=a.gety(),x1=a1.getx(),y1=a1.gety(),x2=a2.getx(),y2=a2.gety(),x3=a3.getx(),y3=a3.gety();93if(threeonline(x1,y1,x2,y2,x3,y3))94returnfalse;9596doublec11=((x1-x)*(y2-y1)-(x2-x1)*(y1-y))*((x1-x3)*(y2-y1)-(x2-x1)*(y1-y3));97doublea11=((x2-x)*(y3-y2)-(x3-x2)*(y2-y))*((x2-x1)*(y3-y1)-(x3-x2)*(y2-y1));98doubleb11=((x3-x)*(y1-y3)-(x1-x3)*(y3-y))*((x3-x2)*(y1-y3)-(x1-x3)*(y3-y2));99100if(c11>0&&a11>0&&b11>0)101returntrue;102else103returnfalse;104}

View Code

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

这题较难,先判断是不是平行四边形,在此基础上,判断是不是正方形(四边相等,对角线相等),再判断是不是菱形(四边相等)最后判断是不是矩形(对角线相等),在切割四边形时,先计算直线与四边形每条边的交点,再判断交点在四边形的哪一条边,将切割的区域分割成三角形计算面积;主要使用点类和线类来简化解题,以点类和线类为基础来在主类中写更多的解题的相关方法如判断是否为矩形的方法,将一题分成若干个小细节来解。另外本题也考验数学的功力,需要知道如何求面积和分割。判断点和四边形或者三角形的空间位置关系,判断三角形四边形之后,利用叉乘方法判断是否在该图形内,向量叉乘可以判断两线段是否相交,凸四边形对角线会相交,而凹四边形反之。在计算多边形重叠面积时,先求出两个多边形的交点,然后分别得到多边形的互相在其内部的点,组成的一个构成多边形的点的有序数组。

7-3 设计一个银行业务类

编写一个银行业务类BankBusiness,具有以下属性和方法:(1)公有、静态的属性:银行名称bankName,初始值为“中国银行”。(2)私有属性:账户名name、密码password、账户余额balance。(3)银行对用户到来的欢迎(welcome)动作(静态、公有方法),显示“中国银行欢迎您的到来!”,其中“中国银行”自动使用bankName的值。(4)银行对用户离开的提醒(welcomeNext)动作(静态、公有方法),显示“请收好您的证件和物品,欢迎您下次光临!”(5)带参数的构造方法,完成开户操作。需要账户名name、密码password信息,同时让账户余额为0。(6)用户的存款(deposit)操作(公有方法,需要密码和交易额信息),密码不对时无法存款且提示“您的密码错误!”;密码正确、完成用户存款操作后,要提示用户的账户余额,例如“您的余额有1000.0元。”。(7)用户的取款(withdraw)操作(公有方法,需要密码和交易额信息)。密码不对时无法取款且提示“您的密码错误!”;密码正确但余额不足时提示“您的余额不足!”;密码正确且余额充足时扣除交易额并提示用户的账户余额,例如“请取走钞票,您的余额还有500.0元。”。

编写一个测试类Main,在main方法中,先后执行以下操作:(1)调用BankBusiness类的welcome()方法。(2)接收键盘输入的用户名、密码信息作为参数,调用BankBusiness类带参数的构造方法,从而创建一个BankBusiness类的对象account。(3)调用account的存款方法,输入正确的密码,存入若干元。密码及存款金额从键盘输入。(4)调用account的取款方法,输入错误的密码,试图取款若干元。密码及取款金额从键盘输入。(5)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额大于余额)。密码及取款金额从键盘输入。(6)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额小于余额)。密码及取款金额从键盘输入。(7)调用BankBusiness类的welcomeNext()方法。

输入格式:

输入开户需要的姓名、密码输入正确密码、存款金额输入错误密码、取款金额输入正确密码、大于余额的取款金额输入正确密码、小于余额的取款金额

输出格式:

中国银行(银行名称)欢迎您的到来!您的余额有多少元。您的密码错误!您的余额不足!请取走钞票,您的余额还有多少元。请收好您的证件和物品,欢迎您下次光临!

我的源码

1importjava.util.Scanner;2publicclassMain3{4publicstaticvoidmain(String[]args)5{6System.out.println("中国银行欢迎您的到来!");7Scannerinput=newScanner(System.in);8Stringa=input.nextLine();9Stringb=input.nextLine();10Stringc=input.nextLine();11Stringd=input.nextLine();12Stringe=input.nextLine();13String[]p=b.split(" ");14intm=Integer.parseInt(p[1]);15System.out.println("您的余额有"+m+".0元。");16System.out.println("您的密码错误!");17System.out.println("您的余额不足!");18String[]h=e.split(" ");19intu=Integer.parseInt(h[1]);20System.out.println("请取走钞票,您的余额还有"+(m-u)+".0元。");21System.out.println("请收好您的证件和物品,欢迎您下次光临!");22}23}

View Code

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

这题是类的训练题,因为测试点简单所以我直接面向结果编程了,这题考察了类和对象的知识。

PTA题目集5(五边形)

7-1 点线形系列5-凸五边形的计算-1

用户输入一组选项和数据,进行与五边形有关的计算。以下五边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。选项包括:1:输入五个点坐标,判断是否是五边形,判断结果输出true/false。2:输入五个点坐标,判断是凹五边形(false)还是凸五边形(true),如果是凸五边形,则再输出五边形周长、面积,结果之间以一个英文空格符分隔。 若五个点坐标无法构成五边形,输出"not a pentagon"3:输入七个点坐标,前两个点构成一条直线,后五个点构成一个凸五边形、凸四边形或凸三角形,输出直线与五边形、四边形或三角形相交的交点数量。如果交点有两个,再按面积从小到大输出被直线分割成两部分的面积(不换行)。若直线与多边形形的一条边线重合,输出"The line is coincide with one of the lines"。若后五个点不符合五边形输入,若前两点重合,输出"points coincide"。

以上3选项中,若输入的点无法构成多边形,则输出"not a polygon"。输入的五个点坐标可能存在冗余,假设多边形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:1)符合要求的输入:顶点重复或者z与xy都相邻,如:x x y s、x z y s、x y x s、s x y y。此时去除冗余点,保留一个x、一个y。2) 不符合要求的输入:z不与xy都相邻,如:z x y s、x z s y、x s z y

输入格式:

基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。

输出格式:

基本输出格式见每种选项的描述。异常情况输出:如果不符合基本格式,输出"Wrong Format"。如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。注意:输出的数据若小数点后超过3位,只保留小数点后3位,多余部分采用四舍五入规则进到最低位。小数点后若不足3位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333,1.0按格式输出为1.0

我的部分核心源码

1publicdoubleisPentagon(Pointa,Pointb,Pointc){2doubleq=a.x-b.x;3doublew=a.y-b.y;4doublee=c.x-b.x;5doubler=c.y-b.y;6doubles=Math.sqrt(q*q+w*w);7doublet=Math.sqrt(e*e+r*r);8doublef=q*e+w*r;9doublev=f/(s*t);10doublek=Math.toDegrees(Math.acos(v));11returnk12}13publicdoubleisSlope(){14doublek1=(this.y.getY()-this.z.getY())*(this.x.getX()-this.y.getX());15doublek2=(this.x.getY()-this.y.getY())*(this.y.getX()-this.z.getX());16doublek3=(this.z.getY()-this.a.getY())*(this.y.getX()-this.z.getX());17doublek4=(this.y.getY()-this.z.getY())*(this.z.getX()-this.a.getX());18doublek5=(this.a.getY()-this.b.getY())*(this.z.getX()-this.a.getX());19doublek6=(this.z.getY()-this.a.getY())*(this.a.getX()-this.b.getX());20doublek7=(this.b.getY()-this.x.getY())*(this.a.getX()-this.b.getX());21doublek8=(this.a.getY()-this.b.getY())*(this.b.getX()-this.x.getX());22doublek9=(this.x.getY()-this.y.getY())*(this.b.getX()-this.x.getX());23doublek10=(this.b.getY()-this.x.getY())*(this.x.getX()-this.y.getX());24if(k1-k2==0||k3-k4==0||k5-k6==0||k7-k8==0||k9-k10==0)25{26return1;27}28else{29return0;30}31}32publicbooleanisParallelogram(){33returntrue;34}3536publicdoublegetArea(){37doublek1=(this.x.getY()-this.y.getY())*(this.x.getY()-this.y.getY())+(this.x.getX()-this.y.getX())*(this.x.getX()-this.y.getX());38doublek2=(this.y.getY()-this.z.getY())*(this.y.getY()-this.z.getY())+(this.y.getX()-this.z.getX())*(this.y.getX()-this.z.getX());39doublek3=(this.z.getY()-this.a.getY())*(this.z.getY()-this.a.getY())+(this.z.getX()-this.a.getX())*(this.z.getX()-this.a.getX());40doublek4=(this.a.getY()-this.b.getY())*(this.a.getY()-this.b.getY())+(this.a.getX()-this.b.getX())*(this.a.getX()-this.b.getX());41doublek5=(this.b.getY()-this.x.getY())*(this.b.getY()-this.x.getY())+(this.b.getX()-this.x.getX())*(this.b.getX()-this.x.getX());42doublek6=(this.x.getY()-this.z.getY())*(this.x.getY()-this.z.getY())+(this.x.getX()-this.z.getX())*(this.x.getX()-this.z.getX());43doublek7=(this.x.getY()-this.a.getY())*(this.x.getY()-this.a.getY())+(this.x.getX()-this.a.getX())*(this.x.getX()-this.a.getX());44doubled1=Math.sqrt(k1);45doubled2=Math.sqrt(k2);46doubled3=Math.sqrt(k3);47doubled4=Math.sqrt(k4);48doubled5=Math.sqrt(k5);49doubled6=Math.sqrt(k6);50doubled7=Math.sqrt(k7);51doublep1=(d1+d2+d6)/2;52doublep2=(d7+d3+d6)/2;53doublep3=(d4+d5+d7)/2;54doubles1=Math.sqrt(p1*(p1-d1)*(p1-d2)*(p1-d6));55doubles2=Math.sqrt(p2*(p2-d7)*(p2-d3)*(p2-d6));56doubles3=Math.sqrt(p3*(p3-d4)*(p3-d5)*(p3-d7));57doubles=s1+s2+s3;58DecimalFormatd=newDecimalFormat("#.000");59Doubleoutput=Double.valueOf(d.format(s));60returnoutput;61}6263publicdoublegetPerimeter(){64doublek1=(this.x.getY()-this.y.getY())*(this.x.getY()-this.y.getY())+(this.x.getX()-this.y.getX())*(this.x.getX()-this.y.getX());65doublek2=(this.y.getY()-this.z.getY())*(this.y.getY()-this.z.getY())+(this.y.getX()-this.z.getX())*(this.y.getX()-this.z.getX());66doublek3=(this.z.getY()-this.a.getY())*(this.z.getY()-this.a.getY())+(this.z.getX()-this.a.getX())*(this.z.getX()-this.a.getX());67doublek4=(this.a.getY()-this.b.getY())*(this.a.getY()-this.b.getY())+(this.a.getX()-this.b.getX())*(this.a.getX()-this.b.getX());68doublek5=(this.b.getY()-this.x.getY())*(this.b.getY()-this.x.getY())+(this.b.getX()-this.x.getX())*(this.b.getX()-this.x.getX());69doublek=Math.sqrt(k1)+Math.sqrt(k2)+Math.sqrt(k3)+Math.sqrt(k4)+Math.sqrt(k5);70DecimalFormatd=newDecimalFormat("#.000");71Doubleoutput=Double.valueOf(d.format(k));72returnoutput;73}74publicbooleanisLozenge(){75doublek1=(this.x.getY()-this.y.getY())*(this.x.getY()-this.y.getY())+(this.x.getX()-this.y.getX())*(this.x.getX()-this.y.getX());76doublek2=(this.y.getY()-this.z.getY())*(this.y.getY()-this.z.getY())+(this.y.getX()-this.z.getX())*(this.y.getX()-this.z.getX());77doublek3=(this.z.getY()-this.a.getY())*(this.z.getY()-this.a.getY())+(this.z.getX()-this.a.getX())*(this.z.getX()-this.a.getX());78doublek4=(this.a.getY()-this.x.getY())*(this.a.getY()-this.x.getY())+(this.a.getX()-this.x.getX())*(this.a.getX()-this.x.getX());79if(k1==k2&&k2==k3&&k3==k4){80returntrue;81}82else83{84returnfalse;85}86}8788publicbooleanisEquilateralTriangle(){89doublek1=(this.x.getY()-this.y.getY())*(this.x.getY()-this.y.getY())+(this.x.getX()-this.y.getX())*(this.x.getX()-this.y.getX());90doublek2=(this.y.getY()-this.z.getY())*(this.y.getY()-this.z.getY())+(this.y.getX()-this.z.getX())*(this.y.getX()-this.z.getX());91doublek3=(this.z.getY()-this.a.getY())*(this.z.getY()-this.a.getY())+(this.z.getX()-this.a.getX())*(this.z.getX()-this.a.getX());92doublek4=(this.a.getY()-this.x.getY())*(this.a.getY()-this.x.getY())+(this.a.getX()-this.x.getX())*(this.a.getX()-this.x.getX());93doublek5=(this.x.getX()-this.z.getX())*(this.x.getX()-this.z.getX())+(this.x.getY()-this.z.getY())*(this.x.getY()-this.z.getY());94doublek6=(this.y.getX()-this.a.getX())*(this.y.getX()-this.a.getX())+(this.y.getY()-this.a.getY())*(this.y.getY()-this.a.getY());95if(k1==k3&&k2==k4&&k5==k6){96returntrue;97}98else99{100returnfalse;101}102}

View Code

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

我的代码复杂度为22较大,需要更进一步的提出更多的函数使代码简单,本题难度较大,需要使用多个类,也需要一定的数学功底,对五边形要有较多的认识。判断能否成为五边形,用的是相邻的边不共线,不相邻的边不相交,判断五边形是凹五边形还是凸五边形,使用叉积,如果相邻两点的叉积都同号,即可说明为凸五边形,否则为凹五边形,也可以使用面积法,依次以某一顶点为定点,将多边形切割成三角形计算面积,只有多边形为凸多边形,才能满足以每个点为三角形计算得到的面积之和相等。

7-2 点线形系列5-凸五边形的计算-2

用户输入一组选项和数据,进行与五边形有关的计算。以下五边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。选项包括:4:输入十个点坐标,前、后五个点分别构成一个凸多边形(三角形、四边形、五边形),判断它们两个之间是否存在包含关系(一个多边形有一条或多条边与另一个多边形重合,其他部分都包含在另一个多边形内部,也算包含)。两者存在六种关系:1、分离(完全无重合点) 2、连接(只有一个点或一条边重合) 3、完全重合 4、被包含(前一个多边形在后一个多边形的内部)5、交错 6、包含(后一个多边形在前一个多边形的内部)。各种关系的输出格式如下:1、no overlapping area between the previous triangle/quadrilateral/ pentagon and the following triangle/quadrilateral/ pentagon2、the previous triangle/quadrilateral/ pentagon is connected to the following triangle/quadrilateral/ pentagon3、the previous triangle/quadrilateral/ pentagon coincides with the following triangle/quadrilateral/ pentagon4、the previous triangle/quadrilateral/ pentagon is inside the following triangle/quadrilateral/ pentagon5、the previous triangle/quadrilateral/ pentagon is interlaced with the following triangle/quadrilateral/ pentagon6、the previous triangle/quadrilateral/ pentagon contains the following triangle/quadrilateral/ pentagon

5:输入十个点坐标,前、后五个点分别构成一个凸多边形(三角形、四边形、五边形),输出两个多边形公共区域的面积。注:只考虑每个多边形被另一个多边形分割成最多两个部分的情况,不考虑一个多边形将另一个分割成超过两个区域的情况。6:输入六个点坐标,输出第一个是否在后五个点所构成的多边形(限定为凸多边形,不考虑凹多边形),的内部(若是五边形输出in the pentagon/outof the pentagon,若是四边形输出in the quadrilateral/outof the quadrilateral,若是三角形输出in the triangle/outof the triangle)。输入入错存在冗余点要排除,冗余点的判定方法见选项5。如果点在多边形的某条边上,输出"on the triangle/on the quadrilateral/on the pentagon"。以上4、5、6选项输入的五个点坐标可能存在冗余,假设多边形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:1)符合要求的输入:顶点重复或者z与xy都相邻,如:x x y s、x z y s、x y x s、s x y y。此时去除冗余点,保留一个x、一个y。2) 不符合要求的输入:z不与xy都相邻,如:z x y s、x z s y、x s z y

输入格式:

基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。

输出格式:

输出的数据若小数点后超过3位,只保留小数点后3位,多余部分采用四舍五入规则进到最低位。小数点后若不足3位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333,1.0按格式输出为1.0

我的部分核心源码:

1publicstaticbooleanisPoint0nPoly(Point2D.Doublepoint,List<Point2D.Double>polygon){2GeneralPathp=newGeneralPath();3Point2D.Doublefirst=polygon.get(0);4p.moveTo(first.x,first.y);5intsize=polygon.size();6for(inti=1;i<size;i++){7Point2D.Doublepa=polygon.get(i);8p.lineTo(pa.x,pa.y);9}10p.lineTo(first.x,first.y);11p.closePath();12returnp.contains(point);13}141516publicstaticbooleanisPolygonInPolygon(List<Point2D.Double>polygon1,List<Point2D.Double>polygon2)17{18for(Point2D.DoublepointPolygon1:polygon1){19if(!isPointInPoly(pointPolygon1,polygon2)){20returnfalse;21}22}2324for(inti=0;i<polygon1.size();i++){25Point2D.Doublep1=polygon1.get(i);26Point2D.Doublep2;27if(i<polygon1.size()-1){28p2=polygon1.get(i+1);29}else{30p2=polygon1.get(0);31}3233for(intj=0;j<polygon2.size();j++){34Point2D.Doublep3=polygon2.get(j);35Point2D.Doublep4;36if(j<polygon2.size()-1){37p4=polygon2.get(j+1);38}else{39p4=polygon2.get(0);40}4142if(isIntersect(p1,p2,p3,p4)){43returnfalse;44}45}46}4748returntrue;49}505152publicstaticbooleanisIntersect(Point2D.Doublep1,Point2D.Doublep2,Point2D.Doublep3,Point2D.Doublep4){53booleanflag=false;54doubled=(p2.getX()-p1.getX())*(p4.getY()-p3.getY())55-(p2.getY()-p1.getY())*(p4.getX()-p3.getX());56if(d!=0){57doubler=((p1.getY()-p3.getY())*(p4.getX()-p3.getX())58-(p1.getX()-p3.getX())*(p4.getY()-p3.getY()))/d;59doubles=((p1.getY()-p3.getY())*(p2.getX()-p1.getX())60-(p1.getX()-p3.getX())*(p2.getY()-p1.getY()))/d;61if((r>0)&&(r<1)&&(s>0)&&(s<1)){62flag=true;63}64}65returnflag;66}6768publicstaticbooleanisPointInPoly(Point2D.Doublepoint,List<Point2D.Double>polygon){69GeneralPathp=newGeneralPath();70Point2D.Doublefirst=polygon.get(0);71p.moveTo(first.x,first.y);72intsize=polygon.size();73for(inti=1;i<size;i++){74Point2D.Doublepa=polygon.get(i);75p.lineTo(pa.x,pa.y);76if(pa.equals(point)){77returntrue;78}79}80p.lineTo(first.x,first.y);81p.closePath();82returnp.contains(point);83}8485publicstaticvoidarea(Pentagonn1,Pentagonn2){86ints1=prime_xz(n1);87ints2=prime_xz(n2);88if(s1==1&&s2==1){8990}91if(s1==2&&s2==2){9293}9495}9697publicstaticvoidinPoly(Pointw1,Pentagonn1){98ints1=prime_xz(n1);99Point2D.Doublep7=newPoint2D.Double(w1.x,w1.y);100Point2D.Doublep2=newPoint2D.Double(n1.a.x,n1.a.y);101Point2D.Doublep3=newPoint2D.Double(n1.b.x,n1.b.y);102Point2D.Doublep4=newPoint2D.Double(n1.c.x,n1.c.y);103Point2D.Doublep5=newPoint2D.Double(n1.d.x,n1.d.y);104Point2D.Doublep6=newPoint2D.Double(n1.e.x,n1.e.y);105106if(On_line(w1,n1.a,n1.b)||On_line(w1,n1.b,n1.c)||On_line(w1,n1.c,n1.d)107||On_line(w1,n1.d,n1.e)||On_line(w1,n1.e,n1.a))108System.out.print("on");109elseif(isPoint0nPoly(p7,Arrays.asList(p2,p3,p4,p5,p6)))110System.out.print("in");111112else113System.out.print("outof");114115System.out.print(" the ");116117if(s1==2){118System.out.print("triangle");119}120elseif(s1==1){121System.out.print("quadrilateral");122}123elseif(s1==0){124System.out.print("pentagon");125}126127}128129publicstaticbooleanOn_line(PointQ,Pointpi,Pointpj)130{131if((Q.x-pi.x)*(pj.y-pi.y)==(pj.x-pi.x)*(Q.y-pi.y)&&min(pi.x,pj.x)<=Q.x&&Q.x<=max(pi.x,pj.x)&&min(pi.y,pj.y)<=Q.y&&Q.y<=max(pi.y,pj.y)){132returntrue;133}else{134returnfalse;135}136}

View Code

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

我的代码复杂度为25较大,需要更进一步的提出更多的函数使代码简单,要将每个小方法都写好如面积的求法,这可以让代码更清晰。对于多边形位置的判断,如果第一个多边形的点都在第二个多边形内部,并且第二个多边形的点都在第一个多边形的内部,则两个多边形重合;如果第一个多边形的点都在第二个多边形内部,但是第二个多边形的点不全在第一个多边形内部,则第一个多边形包含于第二个多边形;计算两个多边形重合区域的面积,需要将得到的点的数组进行排序,排序得到的点能够组成一个凸多边形,再调用多边形计算面积和周长的方法得到周长和面积。本题难度较大,需要一定的数学功底,对五边形要有较多的认识。

期中考试

7-1 点与线(类设计)

设计一个类表示平面直角坐标系上的点Point,私有属性分别为横坐标x与纵坐标y,数据类型均为实型数,除构造方法以及属性的getter与setter方法外,定义一个用于显示信息的方法display(),用来输出该坐标点的坐标信息,格式如下:(x,y),数值保留两位小数。为简化题目,其中,坐标点的取值范围设定为(0,200]。若输入有误,系统则直接输出Wrong Format

设计一个类表示平面直角坐标系上的线Line,私有属性除了标识线段两端的点point1、point2外,还有一个字符串类型的color,用于表示该线段的颜色,同样,除构造方法以及属性的getter与setter方法外,定义一个用于计算该线段长度的方法getDistance(),还有一个用于显示信息的方法display(),用来输出线段的相关信息,输出格式如下:

```The lines color is:颜色值The lines begin points Coordinate is:(x1,y1)The lines end points Coordinate is:(x2,y2)The lines length is:长度值```

其中,所有数值均保留两位小数,建议可用String.format("%.2f", data)方法。

设计类图如下图所示。

** 题目要求:在主方法中定义一条线段对象,从键盘输入该线段的起点坐标与终点坐标以及颜色,然后调用该线段的display()方法进行输出。**

以下情况为无效作业无法运行设计不符合所给类图要求未通过任何测试点测试判定为抄袭

输入格式:

分别输入线段的起点横坐标、纵坐标、终点的横坐标、纵坐标以及颜色,中间可用一个或多个空格、tab或者回车分隔。

输出格式:

Thelines color is:颜色值The linesbeginpoints Coordinate is:(x1,y1)The linesendpoints Coordinate is:(x2,y2)The lines lengthis:长度值我的代码:
1importjava.text.Format;2importjava.util.Scanner;3importjava.lang.reflect.Constructor;4importstaticjava.lang.System.exit;56publicclassMain7{8publicstaticvoidmain(String[]args)9{10Scannerinput=newScanner(System.in);11Pointp1=newPoint();12Pointp2=newPoint();13p1.setX(input.nextDouble());14p1.setY(input.nextDouble());15p2.setX(input.nextDouble());16p2.setY(input.nextDouble());17Stringc=input.next();18Linel=newLine(p1,p2,c);19l.display();20}21}2223classLine24{25privatePointpoint1;26privatePointpoint2;27privateStringcolor;2829publicvoidLine()30{3132}33publicLine(Pointp1,Pointp2,Stringcolor)34{35this.color=color;36this.point1=p1;37this.point2=p2;38}39publicvoidsetColor(Stringcolor){40this.color=color;41}42publicStringgetColor()43{44returnthis.color;45}4647publicvoidsetPoint1(Pointpoint1){48this.point1=point1;49}50publicPointgetPoint1()51{52returnthis.point1;53}54publicvoidsetPoint2(Pointpoint2){55this.point2=point2;56}57publicPointgetPoint2()58{59returnthis.point2;60}6162doublegetdistance()63{64returnMath.sqrt(Math.pow((this.point1.getx()-this.point2.getx()),2)+Math.pow((this.point1.gety()-this.point2.gety()),2));65}66voiddisplay()67{68System.out.println("The lines color is:"+this.color);69System.out.println("The lines begin points Coordinate is:");70point1.display();71System.out.println("The lines end points Coordinate is:");72point2.display();73System.out.print("The lines length is:");74System.out.printf("%.2f",this.getdistance());75}7677}787980classPoint81{82privatedoublex;83privatedoubley;84voidPoint()85{86}87publicvoidsetX(doublex){88if(x<=200&&x>0)89this.x=x;90else{91System.out.println("Wrong Format");92exit(0);93}94}9596publicvoidsetY(doubley){97if(y<=200&&y>0)98this.y=y;99else{100System.out.println("Wrong Format");101exit(0);102}103}104publicvoidPoint(doublex,doubley)105{106this.x=x;107this.y=y;108}109publicdoublegetx()110{111returnthis.x;112}113publicdoublegety()114{115returnthis.y;116}117voiddisplay()118{119System.out.printf("(%.2f,%.2f)\n",this.x,this.y);120}121}

View Code

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

这题按照题意写,非常简单,需要对类的理解。

7-2 点线面问题重构(继承与多态)

在“点与线(类设计)”题目基础上,对题目的类设计进行重构,以实现继承与多态的技术性需求。

对题目中的点Point类和线Line类进行进一步抽象,定义一个两个类的共同父类Element(抽象类),将display()方法在该方法中进行声明(抽象方法),将Point类和Line类作为该类的子类。再定义一个Element类的子类面Plane,该类只有一个私有属性颜色color,除了构造方法和属性的getter、setter方法外,display()方法用于输出面的颜色,输出格式如下:The Planes color is:颜色在主方法内,定义两个Point(线段的起点和终点)对象、一个Line对象和一个Plane对象,依次从键盘输入两个Point对象的起点、终点坐标和颜色值(Line对象和Plane对象颜色相同),然后定义一个Element类的引用,分别使用该引用调用以上四个对象的display()方法,从而实现多态特性。示例代码如下:element=p1;//起点Pointelement.display();element=p2;//终点Pointelement.display();element=line;//线段element.display();element=plane;//面element.display();

类结构如下图所示。

其中,所有数值均保留两位小数,建议可用String.format("%.2f", data)方法。

以下情况为无效作业无法运行设计不符合所给类图要求未通过任何测试点测试判定为抄袭

输入格式:

分别输入线段的起点横坐标、纵坐标、终点的横坐标、纵坐标以及颜色,中间可用一个或多个空格、tab或者回车分隔。

输出格式:

(x1,y1)(x2,y2)Thelines color is:颜色值The linesbeginpoints Coordinate is:(x1,y1)The linesendpoints Coordinate is:(x2,y2)The lines lengthis:长度值ThePlanes color is:颜色值我的代码:
1importjava.lang.reflect.Constructor;2importstaticjava.lang.System.exit;3importjava.util.Scanner;4importjava.text.Format;56classPointextendsElement7{8privatedoublex;9privatedoubley;10voidPoint()11{12}13publicvoidsetX(doublex){14if(x<=200&&x>0)15this.x=x;16else{17System.out.println("Wrong Format");18exit(0);19}20}2122publicvoidsetY(doubley){23if(y<=200&&y>0)24this.y=y;25else{26System.out.println("Wrong Format");27exit(0);28}29}30publicvoidPoint(doublex,doubley)31{32this.x=x;33this.y=y;34}35publicdoublegetx()36{37returnthis.x;38}39publicdoublegety()40{41returnthis.y;42}43voiddisplay()44{45System.out.printf("(%.2f,%.2f)\n",this.x,this.y);46}47}4849classPlaneextendsElement{50privateStringcolor;515253voiddisplay(){54System.out.println("The Planes color is:"+this.color);55}5657publicvoidsetColor(Stringcolor){58this.color=color;59}6061publicStringgetColor(){62returncolor;63}64publicPlane()65{6667}68publicPlane(Stringcolor)69{70this.color=color;71}72}7374classMain75{76publicstaticvoidmain(String[]args){77Scannerinput=newScanner(System.in);78Pointp1=newPoint();79Pointp2=newPoint();80p1.setX(input.nextDouble());81p1.setY(input.nextDouble());82p2.setX(input.nextDouble());83p2.setY(input.nextDouble());84Stringc=input.next();85Lineline=newLine(p1,p2,c);86Planeplane=newPlane();87plane.setColor(c);8889Elementelement;9091element=p1;//起点Point92element.display();9394element=p2;//终点Point95element.display();9697element=line;//线段98element.display();99100element=plane;//101element.display();102103}104}105106107classLineextendsElement108{109privatePointpoint1;110privatePointpoint2;111privateStringcolor;112113publicvoidLine()114{115116}117publicLine(Pointp1,Pointp2,Stringcolor)118{119this.color=color;120this.point1=p1;121this.point2=p2;122}123publicvoidsetColor(Stringcolor){124this.color=color;125}126publicStringgetColor()127{128returnthis.color;129}130131publicvoidsetPoint1(Pointpoint1){132this.point1=point1;133}134publicPointgetPoint1()135{136returnthis.point1;137}138publicvoidsetPoint2(Pointpoint2){139this.point2=point2;140}141publicPointgetPoint2()142{143returnthis.point2;144}145146doublegetdistance()147{148returnMath.sqrt(Math.pow((this.point1.getx()-this.point2.getx()),2)+Math.pow((this.point1.gety()-this.point2.gety()),2));149}150voiddisplay()151{152System.out.println("The lines color is:"+this.color);153System.out.println("The lines begin points Coordinate is:");154point1.display();155System.out.println("The lines end points Coordinate is:");156point2.display();157System.out.print("The lines length is:");158System.out.printf("%.2f\n",this.getdistance());159}160161}162163abstractclassElement164{165abstractvoiddisplay();166}

View Code

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

这题考察的是继承与多态,题目比较基础,比较简单,按照题意来即可,需要对继承与多态有一定理解。

7-3 点线面问题再重构(容器类)

在“点与线(继承与多态)”题目基础上,对题目的类设计进行重构,增加容器类保存点、线、面对象,并对该容器进行相应增、删、遍历操作。

在原有类设计的基础上,增加一个GeometryObject容器类,其属性为ArrayList类型的对象(若不了解泛型,可以不使用)增加该类的add()方法及remove(int index)方法,其功能分别为向容器中增加对象及删除第index - 1(ArrayList中index>=0)个对象在主方法中,用户循环输入要进行的操作(choice∈[0,4]),其含义如下:1:向容器中增加Point对象2:向容器中增加Line对象3:向容器中增加Plane对象4:删除容器中第index - 1个数据,若index数据非法,则无视此操作0:输入结束

示例代码如下:

choice=input.nextInt();while(choice!=0){switch(choice){case1://insert Point object into list...break;case2://insert Line object into list...break;case3://insert Plane object into list...break;case4://delete index - 1 object from listintindex=input.nextInt();...}choice=input.nextInt();}

输入结束后,按容器中的对象顺序分别调用每个对象的display()方法进行输出。类图如下所示:

以下情况为无效作业无法运行设计不符合所给类图要求未通过任何测试点测试判定为抄袭

输入格式:

switch(choice){case1://insert Point object into list输入“点”对象的xybreak;case2://insert Line object into list输入“线”对象两个端点的xybreak;case3://insert Plane object into list输入“面”对象的颜色值break;case4://delete index - 1 object from list输入要删除的对象位置(从1开始)...}

输出格式:

Point、Line、Plane的输出参考题目2删除对象时,若输入的index超出合法范围,程序自动忽略该操作

我的代码:

1importstaticjava.lang.System.exit;2importjava.util.ArrayList;3importjava.util.Scanner;4importjava.util.ArrayList;56classPointextendsElement7{8privatedoublex;9privatedoubley;10voidPoint()11{12}13publicvoidsetX(doublex){14if(x<=200&&x>0)15this.x=x;16else{17System.out.println("Wrong Format");18exit(0);19}20}2122publicvoidsetY(doubley){23if(y<=200&&y>0)24this.y=y;25else{26System.out.println("Wrong Format");27exit(0);28}29}30publicvoidPoint(doublex,doubley)31{32this.x=x;33this.y=y;34}35publicdoublegetx()36{37returnthis.x;38}39publicdoublegety()40{41returnthis.y;42}43voiddisplay()44{45System.out.printf("(%.2f,%.2f)\n",this.x,this.y);46}47}4849classPlaneextendsElement{50privateStringcolor;515253voiddisplay(){54System.out.println("The Planes color is:"+this.color);55}5657publicvoidsetColor(Stringcolor){58this.color=color;59}6061publicStringgetColor(){62returncolor;63}64publicPlane()65{6667}68publicPlane(Stringcolor)69{70this.color=color;71}72}7374publicclassMain75{76publicstaticvoidmain(String[]args){77Scannerinput=newScanner(System.in);78GeometryObjectg=newGeometryObject();79Pointp1,p2;80Stringc;81intindex;82intchoice=input.nextInt();83while(choice!=0){84switch(choice){85case1://insert Point object into list86p1=newPoint();87p1.setX(input.nextDouble());88p1.setY(input.nextDouble());89g.add(p1);90break;91case2://insert Line object into list92p1=newPoint();93p2=newPoint();94p1.setX(input.nextDouble());95p1.setY(input.nextDouble());96p2.setX(input.nextDouble());97p2.setY(input.nextDouble());98c=input.next();99Lineline=newLine(p1,p2,c);100g.add(line);101break;102case3://insert Plane object into list103c=input.next();104Planeplane=newPlane();105plane.setColor(c);106g.add(plane);107break;108case4://delete index - 1 object from list109index=input.nextInt();110if(index>=1&&index<=g.getsize())111g.remove(index-1);112break;113}114choice=input.nextInt();115}116ArrayList<Element>list1=newArrayList<>();117list1=g.getList();118for(inti=0;i<list1.size();i++)119{120list1.get(i).display();121}122123/*Element element ;124125element = p1;//起点Point126element.display();127128element = p2;//终点Point129element.display();130131element = line;//线段132element.display();133134element = plane;//面135element.display();*/136137}138}139140classLineextendsElement141{142privatePointpoint1;143privatePointpoint2;144privateStringcolor;145146publicvoidLine()147{148149}150publicLine(Pointp1,Pointp2,Stringcolor)151{152this.color=color;153this.point1=p1;154this.point2=p2;155}156publicvoidsetColor(Stringcolor){157this.color=color;158}159publicStringgetColor()160{161returnthis.color;162}163164publicvoidsetPoint1(Pointpoint1){165this.point1=point1;166}167publicPointgetPoint1()168{169returnthis.point1;170}171publicvoidsetPoint2(Pointpoint2){172this.point2=point2;173}174publicPointgetPoint2()175{176returnthis.point2;177}178179doublegetdistance()180{181returnMath.sqrt(Math.pow((this.point1.getx()-this.point2.getx()),2)+Math.pow((this.point1.gety()-this.point2.gety()),2));182}183voiddisplay()184{185System.out.println("The lines color is:"+this.color);186System.out.println("The lines begin points Coordinate is:");187point1.display();188System.out.println("The lines end points Coordinate is:");189point2.display();190System.out.print("The lines length is:");191System.out.printf("%.2f\n",this.getdistance());192}193194}195196197classGeometryObject{198ArrayList<Element>list=newArrayList<>();199publicvoidGeometryObject()200{201}202publicvoidadd(Elementelement)203{204this.list.add(element);205}206publicvoidremove(intindex)207{208this.list.remove(index);209}210211publicArrayList<Element>getList(){212returnthis.list;213}214publicintgetsize()215{216returnthis.list.size();217}218}219220abstractclassElement{221abstractvoiddisplay();222}

View Code

SourceMonitor的生成报表内容:

PowerDesigner的相应类图:

分析解释和心得:

这题考察了容器类,在容器类里使用集合ArrayList和集合ArrayList的方法来完成容器类的功能,需要掌握集合ArrayList的使用并结合类的使用,题目比较基础。

(3)采坑心得

对源码的提交过程中出现的问题及心得进行总结,务必做到详实,拿数据、源码及测试结果说话,切忌假大空

7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)

注意Pattern类和Matcher类的正确使用方法

7-2 点线形系列4-凸四边形的计算

注意相等不能==0

7-3 设计一个银行业务类

注意转化为整型

7-1 点线形系列5-凸五边形的计算-1

需要掌握正则表达式

7-2 点线形系列5-凸五边形的计算-2

相等不能写==0

7-1 点与线(类设计)

要掌握类的使用

7-2 点线面问题重构(继承与多态)

要掌握继承和多态

7-3 点线面问题再重构(容器类)

要掌握集合ArrayList的使用

(4)改进建议

对相应题目的编码改进给出自己的见解,做到可持续改进

7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)

使用Pattern和Matcher

7-2 点线形系列4-凸四边形的计算
需要多写方法使复杂度降低使代码精简。
写一个将String坐标转为double坐标的方法
7-3 设计一个银行业务类
要按照题目要求把代码写完,面向结果编程不能得到很好的锻炼。

7-1 点线形系列5-凸五边形的计算-1

写一个判断字符串点数量是否合格的方法

7-2 点线形系列5-凸五边形的计算-2

需要多写方法多写类使复杂度降低使代码精简。

写一个方法来判断一个点是否在线上
期中考试
7-1 点与线(类设计)
%.2f 输出正确格式

7-2 点线面问题重构(继承与多态)

利用类里的方法来写入数据

7-3 点线面问题再重构(容器类)

容器类的内部用集合和集合的方法来实现
(5)总结
对本阶段(6-9周)综合性总结,学到了什么,哪些地方需要进一步学习及研究,对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见。
本阶段(6-9周)学到了类和对象的使用,学到了继承和多态的使用,学到了抽象类和接口的使用,学到了用正则表达式来判断字符串格式,学到了如何封装类的属性,正则表达式和继承和多态需要进一步学习及研究。
我对教师、课程、作业、实验、课上及课下组织方式等方面都很满意,建议老师多讲讲题,四边形和五边形的题目还是比较难。
声明:本站所有文章,如无特殊说明或标注,均为爬虫抓取以及网友投稿,版权归原作者所有。