热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

南昌航空大学软件学院ptajava第一阶段总结

嗨嗨嗨到了每月一次的总结时间了主要是总结前三次具体代码在另外几篇博客里本博客更多的对一些重要的题目做一个讲解和总结目录目录目录代码链接前言题量知识点难度设计与分析7-2串口字符解析

嗨嗨嗨

到了每月一次的总结时间了

主要是总结前三次

具体代码在另外几篇博客里

本博客更多的对一些重要的题目做一个讲解和总结

drawing


目录

目录



  • 目录

    • 代码链接

    • 前言

      • 题量

      • 知识点

      • 难度



    • 设计与分析

      • 7-2 串口字符解析

        • Main



      • 7-1 点线形系列1-计算两点之间的距离

        • 1.Point

        • 2.PointTaking



      • 7-2 点线形系列2-线的计算

        • case1

        • case2

        • case3

        • case4

        • case5



      • 7-3 点线形系列3-三角形的计算

        • Triangle





    • 踩坑心得

    • 改进建议

    • 总结




代码链接

      第一次作业

      第二次作业

      第三次作业


前言

    三次题目都完(也)(许)写完了,java作业治好了我的精神内耗

drawing

    对于森林小精灵laster、大佬jc等等等等人秒杀三期作业的行为我只能orz.but,他们的强大并不影响我老老实实敲代码,我绝对不当压力小子,坚持稳扎稳打,也希望大家也能耐住性子打代码,不要网上随便找到一串别人的代码就狠狠偷。接下来我会以题量、知识点和难度三个方面对三次作业的总体水平进行一个简单评价。


题量

    题量方面,作业一为7题,作业二三为3题,虽然作业一题量更大但实际上是三的题量更大一些hhhh,在第三次作业的题目里,有很多的case,而那些case要比题目一中的题目要复杂的多,题量最少的是第二次作业。


知识点

    知识点方面,第一二次作业主要是语法的学习,第二次还有于正则表达式的学习,但是用面向过程的方法也能很好解决,第三次作业主要是对面向对象方法的学习,如果方法和类封装的不好会做的很吃力。


难度

    难度方面,最难的肯定是第三次,然后是第一次,最后是第二次。第三次的难度在于早已忘了的的数学知识、复杂的判断,还有精度控制(还有正则表达式hhhh)。第一次的难度更多在于语法的不熟悉,很多人都是第一次用java,而且java的语法扩展上有很多与c不一样的地方,所以难点更多在于对新鲜事物的学习与使用,并且第一次整整有七题,一题一题敲还是要花很长时间的,另外还有一些精度的坑hhhh,真的很浪费时间。

drawing

    第二次和另外两次比起来就好很多,相对来说难度就没那么大,题量或者是题目难度来说,都不是很高,唯一可以体现含金量的正则表达式过程,都被我用if else的分支结构给解决了。


设计与分析

    个人认为,代码的设计构造要比过题思路要重要的多,要是一些方法没封装起来,会让人绕晕,而且代码可读性巨差(有幸看过一些学弟学妹的代码,乍一眼巨晕hhh。他们在一if else中还能把代码思路理清楚真的挺厉害的)。而我也勉勉强强做到了封装。后面我会对几个比较重要的题目进行剖析,按类按方法进行讲解和作用。


7-2 串口字符解析

    很惭愧,这题我用的是面向过程的写法,只有一个类一个方法,圈复杂度有点抽象。

    不急,先看题。

    RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5 ~ 8 位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。

    题目的大概意思就是处理一个字符串,并从中读出一段段数据,数据是有包头包尾的,且题目设置一个数据包长度为11个字符串,看懂这些其实就很简单了。即使仅仅使用面对过程的方法也很轻松


Main

    很遗憾的,只有一个main类和一个main方法,想来想去还是不想改,大概是记录自己一个学习的过程,让很多年后的我还能看看当年写的屎山hhh。

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String ch;
int flag=1;
ch = input.next();
if(ch.length()<11){
System.out.printf("null data");
return;
}
A:for(int i=0;i if(ch.charAt(i)=='0'&&ch.length()-i>10){
System.out.printf("%d:",flag++);
if(ch.charAt(i+10)!='1'){
System.out.printf("validate error\n");
i+=10;
continue ;
}
int f=0;
for(int j=i+1;j if(ch.charAt(j)=='1')
f++;
if(((f&1)==0&&ch.charAt(i+9)!='1')||((f&1)==1&&ch.charAt(i+9)!='0')){
System.out.printf("parity check error\n");
i+=10;
continue ;
}
for(int j=i+1;j System.out.printf("%c",ch.charAt(j));
i+=10;
System.out.printf("\n");
}
}
if(flag==1){
System.out.printf("null data");
return;
}
}
}

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

    题目简洁明了,就是要给你一串字符,问你其中包含的两个点的距离。

    难点在于正则表达式hhhh,搞了我巨久,好在最后彻底学会了,但是后面的正则表达式还是改了点,光用这个正则表达式后面题目的case过不去。其他没啥难度,算是一个顺承的过程,这个题目写的代码后面还能用。


1.Point

    属于点的类,包含有两点距离计算。

class Point {//点的类
double x = 0 , y = 0 ;
double DistanceCalculation(Point b) {
return Math.sqrt((this.x-b.x)*(this.x-b.x)+(this.y-b.y)*(this.y-b.y));
}//返回两点距离
}

2.PointTaking

    本来是作为字符输入和坐标剥离的,但是面向过程之魂燃烧,就开始处理起来了,是实际的主函数。

class PointTaking {
String ch;
double Solve() {
Point a = new Point();
int pos = 0;
Point b = new Point();
// String[]
String[] c = this.ch.split(" ");//将字符串以空格分割
for(String i:c) {//对分割的字符串遍历
String[] d = i.split(",");
for(String j:d) {
// System.out.printf(j+"\n");
if(!j.matches("^[+-]?(([0-9][1-9]*\\.\\d+)|(0\\.\\d+)|([0-9][1-9]*))$"))//正则表达式判断是否合法
return -1;//返回输入错误
if(pos==0)//按位读入坐标x1,y1,x2,y2
a.x =Double.parseDouble(j);
else if(pos == 1)
a.y = Double.parseDouble(j);
else if(pos == 2)
b.x=Double.parseDouble(j);
else
b.y =Double.parseDouble(j);
pos++;
}
}
if(c.length!=2)
return -2;//返回错误点数量
return a.DistanceCalculation(b);
}
}

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"。

    好家伙,一题更比六题强。

drawing

蛋黄猫看完都累趴了

    咱们来梳理一下几个要求:1、判断垂直;2、判断点到直线距离;3、判断三点是否在一条直线;4、判断两直线是否平行;5、计算交叉点。

    梳理完其实就很明了了,我按case给大家讲解一下我的代码。


case1

    首先肯定是判断斜率是否为0,即两点x坐标相等,然后直接输出斜率,斜率这块我是封装在了线的类中的,在后面我会贴上各个类。

if(pointSet[1].x==pointSet[2].x) {
System.out.printf("Slope does not exist");
return 4;
}
line.a=pointSet[1];
line.b=pointSet[2];
System.out.printf(line.slope()+"");

case2



case3



case4



case5



7-3 点线形系列3-三角形的计算

    本次博客的最难题来了。简单分析一下这题的五个case,除了第四个很难之外,其他case其实都还好,各种格式错误、输入错误来来回回折磨我几个小时,我的强迫症一发作就必须把前面的case过掉才会安心做其他的case,然后就是疯狂提交:

drawing

    这也是一个调试小技巧,看懂掌声。

    然后我们按类来讲讲我的代码。


Triangle

    除了之前用的一些类外,针对第三题我重新设置了一个类Triangle,主要功能是计算三角形的面积。

public class Triangle {
Line a;
Line b;
Line c;
public Triangle() {
}
double area() {
double p = (Math.sqrt((this.a.a.x - this.a.b.x) * (this.a.a.x - this.a.b.x) + (this.a.a.y - this.a.b.y) * (this.a.a.y - this.a.b.y)) + Math.sqrt((this.b.a.x - this.b.b.x) * (this.b.a.x - this.b.b.x) + (this.b.a.y - this.b.b.y) * (this.b.a.y - this.b.b.y)) + Math.sqrt((this.c.a.x - this.c.b.x) * (this.c.a.x - this.c.b.x) + (this.c.a.y - this.c.b.y) * (this.c.a.y - this.c.b.y))) / 2.0;
return Math.sqrt(p * (p - Math.sqrt((this.a.a.x - this.a.b.x) * (this.a.a.x - this.a.b.x) + (this.a.a.y - this.a.b.y) * (this.a.a.y - this.a.b.y))) * (p - Math.sqrt((this.b.a.x - this.b.b.x) * (this.b.a.x - this.b.b.x) + (this.b.a.y - this.b.b.y) * (this.b.a.y - this.b.b.y))) * (p - Math.sqrt((this.c.a.x - this.c.b.x) * (this.c.a.x - this.c.b.x) + (this.c.a.y - this.c.b.y) * (this.c.a.y - this.c.b.y))));
}
}

踩坑心得


改进建议


总结



推荐阅读
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 题目描述:给定一个N*M的网格,初始时网格中有k个芯片,每个芯片的位置已知。玩家可以在每一步操作中将所有芯片沿同一方向移动一格。如果芯片到达边界,则保持不动。目标是通过一系列操作,使每个芯片依次访问指定的目标位置。 ... [详细]
  • 本题要求实现一个函数,用于检查给定的字符串是否为回文。回文是指正向和反向读取都相同的字符串。例如,“XYZYX”和“xyzzyx”都是回文。 ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • PHP 实现多级树形结构:构建无限层级分类系统
    在众多管理系统中,如菜单、分类和部门等模块,通常需要处理层级结构。为了高效管理和展示这些层级数据,本文将介绍如何使用 PHP 实现多级树形结构,并提供代码示例以帮助开发者轻松实现无限分级。 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 本文介绍 Java 中如何使用 Year 类的 atMonth 方法将年份和月份组合成 YearMonth 对象,并提供代码示例。 ... [详细]
author-avatar
没有水的鱼0713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有