ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PTA前三次题目集总结Blog

2022-04-10 04:01:25  阅读:161  来源: 互联网

标签:知识点 题目 double System PTA Blog Java 数据


                                                        三次作业总结Blog1

 A 前言:Java语言程序设计已经学习了一段时间,完成了三次pta作业,在此进行对于三次题目集知识点,题量,难度等情况的个人总结:

  若是想处理的更为体现类的形式,可以将数据计算处理在一个计算类中,判断条件写在判断类中,结果输出写在一个输出类中,这样可以将题目处理的更有可读性。

(1)第一次作业基本上是基本的编程的语法训练,基本是课本的前八章节内容,题量较大(九道题),难度小,(有上学期的C语言的基础)同时也帮助我们熟悉Java的基本语法并且区分与C语言的不同,涉及

  的知识点主要 是基本的输入,输出,if,for、do while、while循环语句,字符串数组和字符串的一些基本函数功能,数学函数等。

(2)第二次作业较第一次提升了难度,但我认为这才是进入了真正的初级题目,同时也只是发布了三题,都是关于String类型的题目,在写当中我是查找课本的知识点然后现学现用的,主要是字母与数字的转   

  换,对输入的字符串解析(判断再选择取子字符串),以及进一步考察了编程的严谨,都涉及了格式判断,且三题都是实际应用问题。

(3)第三次作业才是在java的领域里解决题目,所以在依旧是三题的同时,知识点完全是新的,我们需要学会构造类,运用类,难度也于我非常大(起码我最终还是没有合格完成任务)。三题都是点线形系列,

  都是数学里对于三角形、线之间的问题,if选择语句在里面运用的“团团 转”。

(4)这三次作业,第一次让我们先简单舒适地适应一下,第二次在第一次直接加大难度,但又是我们可以接受,知道自己可以通过学习完成的任务,有信心。但第三次作业直接打了个措手不及,让我们意识到      这才是我们日后真真正正要学习、掌握、思考、完成的任务,这才是Java!众观三次的答案提交的通过率,两三千多次的提交,不超过70左右的成功,并且最后一题更是0通过率。分析其难的原因,大概有这      三 点:第一是我们在java所知的太少,拿到问题对于想要达到的结果不知道怎么与Java的知识点联系起来,但不急,我们在写的同时去有目的的查找学习,日后再进行全面的学习。这就是知识点的综合运用方    面,我们需要类的知识,但还需要字符串分割功能,字符匹配,替代等去满足一个个小需求。第二是题目测试点的问题,只能每写完一小部分就提交查看是否满足了测试点,但测试点也没有具体点,只能摸        索。第三是我们需要广泛涉猎知识学习新内容,需要高强度学习。

 B 设计与分析  采坑心得   改进建议 :

(1)题目集1:7-8 巴比伦法求平方根近似值

采坑心得 

while((Math.abs(nextGuess-lastGuess)>=0.000001))
{
lastGuess=nextGuess ;
nextGuess = (lastGuess+n/lastGuess)/2;
}

这是一个容易遗漏的知识点的坑:因习惯用等于号去衡量,导致自己对这个问题一直没有意识到,盲目修改半天却找不出问题,后询问同学了解了浮点精确度的问题才得以正确解题。

float,double分别遵循R32-24,R64-53的标准。所以float的精度误差在1e-6;double精度误差在1e-15 。

判断float:则是      if(Math.abs(f) <= 1e-6);

判断double:则是  if(Math.abs(f) <= 1e-15);

(2)题目集1:7-9 二进制数值提取 

改进建议 

题目要求以-1为结束符,所以我们要先判断结尾是不是-1,但在实际提交中我只判断了“-”就默认找到了“-1”,所以有所欠缺

 if(s.charAt(i)=='-'){flag=1;b=i;break;}//但其实不太准确,可能是-2-3之类的

int b=s.indexOf("-1");//why '-1'is error,‘-’可以.因为
if(b==-1){System.out.print("Wrong Format");}//没有-1

(3)题目集1:7- 7  判断三角形类型

设计与分析

 

if(a>=1&&a<=200&&b>=1&&b<=200&&c>=1&&c<=200)

{
if((a+b>c)&&(Math.abs(a-b)<c))
{
if(a==b&&b==c&&a==c)
{System.out.println("Equilateral triangle");}
else if(a==b||b==c||a==c)
{System.out.println("Isosceles triangle");}
else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
{System.out.println("Right-angled triangle");}
else if( (a==b&&Math.abs(a*a+b*b-c*c)<0.00001)||(b==c&&Math.abs(c*c+b*b-a*a)<0.00001)||(a==c&&Math.abs(a*a+c*c-b*b)<0.00001))
{System.out.println("Isosceles right-angled triangle");}

else
{System.out.println("General triangle");}
}
else
{System.out.println("Not a triangle");}
}
else
{
System.out.println("Wrong Format");
}

采坑心得 

 通过大量的if语句完成全部情况的概括,要细心{}的对应。

这是一个容易遗漏的知识点的坑:因习惯用等于号去衡量,导致自己对这个问题一直没有意识到,盲目修改半天却找不出问题,后询问同学了解了浮点精确度的问题才得以正确解题。

float,double分别遵循R32-24,R64-53的标准。所以float的精度误差在1e-6;double精度误差在1e-15 。

改进建议

  根据SourceMonitor以及PowerDesigner软件测评结果,该源码存在两个问题:复杂度偏高,我们需要优化;题目简单,障碍很少,题目简单。可以通过switch语句减少if语句的使用,既然已经知道了情况的可能性,对题目数据进行统一完整的处理,达到降低复杂度的效果,同时计算机运行的效率也会变高。

补充:对于筛选出最大边的排序问题,可以采用sort排序法,利用Java自带的方法完成排序。

 

(4)题目集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。

采坑心得

题目的目的是用if来做多个判断,首先合不合法,再是格式对不对,再来用s.substring()输出一个需要的子字符串,注意if else的使用。

改进建议

  由SourceMonitor以及PowerDesigner软件测评结果可以看到,这段程序复杂度高,且都在主类中完成。这是段效率不高的代码(由自己提交题目时,偶尔会出现运行超时可以看出),究其原因,是因为if语句过多,导致程序运行的过于拖沓,后参考其他人博客发现,可以采用switch语句,复杂度可以大幅降低。其实想处理的更为简洁,可以使用类的形式,将数据计算处理在一个计算类中,判断条件写在判断类中,结果输出写在一个输出类中,这样可以将题目处理的更有可读性。

 

(5)题目集3:7-1 点线形系列1-计算两点之间的距离

设计与分析

 

  这是个目的要求非常明确的题目,但是有些要求不知道怎么实现,比如从输进去的string类型取出里面的double数据。一开始是使用将取出的字符’‘直接转换为数字,再拼成double数据,但发现里面太过绕了,而且不知道具体数据位数,不知道取多少位字符,所以乱转了一圈。

采坑心得

 实际上可以先用正则运算使string里都是数字,String[] n = s.split("[,\\s]");

再用一个特殊的函数直接完成转换,并不需要想之前的那样一步步转化,a[j]= Double.parseDouble(n[j]);//转为double数据

split(“s”) 以字符s为分隔线,分隔后返回字符数组;

split("\s")以碰到的每个空格、换行符、回车为分隔线,如遇到连续多个空格、换行符、回车就会连续划分,分隔后返回字符数组;
split("\s+")以空格、换行符、回车为分隔线,相邻的多个空格、换行符、回车仍然视为只有一个,分隔后返回字符数组。

改进建议

 由SourceMonitor以及PowerDesigner软件测评结果可以看到,改题目复杂度高,且没有用类完成。为了使代码直接去除格式非法的情况(++2,-2.3 0.9,-3.2),可以使用try+catch程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句。

public static int NumType(String s)
{
Double a;
try
{
a = Double.parseDouble(s);
}catch(Exception e)
{return -1;}
return 0;
}

 

(6)题目集3:7-2 点线形系列2-线的计算 

 设计与分析

 改题目需要完成五个要求,该题复杂度较高,如果不去创建新的类,单单在main里一路写下来,代码将又长又复杂。

采坑心得 改进建议

 所以我们要学会去用构建类去解决问题,将问题分块。

 

 

  该同学代码可以说很关键的抓住了这个本质。但同时由此可以想到,若用类的聚合,则会使类的题目归于一体,这是后续有能力可以去尝试的方向,也是类的升级使用,进一步体现Java面向对象编程。

 

 

(7)题目集3:7-3 点线形系列3-三角形的计算

设计与分析

 

 该题目的目的和例子6一样还是实现五个小功能,但较6在实际问题上又难了,我们需要了解射线法的原理(由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"),要熟悉这个原理,再转化为我们的代码。同样构造类使问题分块解决。

采坑心得 改进建议

1.String[] n = s.split("[,\\s:]");

  正则表达式的空格应该使用\\s来表示。

应该补充double数据的合法性检验

public static int NumType(String s)
{
Double a;
try
{a = Double.parseDouble(s);}
catch(Exception e)
{return -1;}
return 0;
}

2.我总是对于问题不会去探寻简便的解决方法,总是一味地完成题目要求,导致每次都错过构造类的方法,使得代码又长又繁杂,不仅写的过程中容易出错,修改更是麻烦。所以我不应该只是做题,更应该思考,写代码前多想想自己的方法,而不是看一个小功能if一个小功能。弥补类设计的缺陷,学会灵活运用类与类之间的多种关系,使代码简洁清晰。

 

 

C总结:

  首先在第一阶段的学习中,通过循序渐进的方式从开始从借助c语言的知识来认识Java,再到正式的了解java设计,它是面向对象的。学习的东西从基础开始,再从作业中实践复习加深掌握。从课本的知识到csdn上有一定具体描述来寻找想要的java方法。更明白了面向过程范式聚焦于方法的设计,它将数据与方法结合在对象中。在明白许多Java方法要求使用对象作为参数,下一阶段学习任务也包括学会使用ava能将数据类型合并或包装到一个对象中。其实程序设计是用来解决问题的,尤其是算法方面,所以我们要学会去做题,见识大量的题目,培养我们的思维。平时我们也要培养我们解决程序设计错误的能力,要学会去看给出的错误提示,学会总结,这样不仅能够避免也能更加掌握所学。

 感谢java课程老师的指导与作业监督和pta平台,我明白在这门课上要学习的东西还有很多,自己知道的太过少,在每一个阶段做好每一个阶段的任务,注重基础,注重实践,注重设计。

标签:知识点,题目,double,System,PTA,Blog,Java,数据
来源: https://www.cnblogs.com/xyq123/p/16124556.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有