总结Blog
总结Blog
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
前言
题目集一:在题目集一中共布置了九道题,主要了考察对Java语言不同数据类型的运用、字符串类型
数据的处理、循环和判断等其他知识点的运用。
题目集二:在题目集二中共布置了三道题,主要考察了对Java语言中String的格式判断、内容提取和
内容判断等其他知识的运用。
题目集三:在题目集三中布置了三道题,主要考察了对Java语言中类的创建和使用、String的格式判
断、内容提取和内容判断等其他知识的运用。
期中考试:此次考试有三道题,三道题目是有层层深入的联系,主要考察了类的构造方法、对象私有
属性的设置、属性的getter与setter方法、继承与多态、抽象类的使用等方面知识。题目总体来说不太难,
给出了类图,思路比较清晰,但是因为我的基础不扎实,所以在期中考试中没有拿到满分。
题目集四:此次作业有三道题,题目一要求用正则表达式,考察了自主学习技能、题目二是考察对
数据的处理与分析、题目三是对现实中存在的对象进行编程实现其简单功能。
题目集五:此次作业有两道题,是关于凸五边形的计算问题,难度比之前的题目集大,其中对类的设
计、类之间的关系处理、相应数学知识的运用和计算进行了考察,
题目集六、七、八:后面三次的题目集中都有电信系列的题目,其中涉及到子类、父类,类的创建,
类的管理,正则表达式等等。
目前做了五次实验,通过实验编程能够很好的锻炼自己的编程能力,很好的巩固自己所学的知识。
在做实验时有很多方法的使用都要去学习,去琢磨,通过查阅资料,参考同学网上找的代码去学习,
去改进,虽然功能有些不完善,但是总体而言还是收获很大的。
设计与分析
1.通过charAt、substring的运用对字符串进行截取分析。
2.设计语句判断输入数据的正确性。
3.用if语句对不同情况进行不同的分析,输出不同的结论。
用于判断数据的位数正确性
public static boolean jishu(String temp) { int k=0; for(int i=0;i<9;i++) { if(temp.charAt(i)=='1') k++; } if(k%2==0) { return false; } else { return true; } }
编程心得
1、可用方法编写部分代码,使Main方法更加简洁。
2、有了进行简单数据分析的经验。
输入连个点的坐标,计算两点之间的距离
设计思路
1、输入的数据格式应为字符串,应改对字符串进行处理再用处理所得的数据用于计算。
2、构造一个类来处理字符串,该类应有能判断格式错误的功能。
判断输入数据格式是否正确,并转换成Double类型
double num(String q) { double p=0; int k=0,l=0,y=0,j=0; for(int i=0;i<q.length();i++) { if(q.charAt(i)=='+'||q.charAt(i)=='-') { k=i; y++; } if(q.charAt(i)=='.') { l=i; j++; } if(j>1||y>1) { System.out.println("Wrong Format");//格式错误 System.exit(0); } } if(l==q.length()||k==q.length()||(q.charAt(0)=='.')||(k>0&&k<q.length())) { System.out.println("Wrong Format");//格式错误 System.exit(0); } if((q.charAt(0)=='+'&&q.charAt(1)=='+')||(q.charAt(0)=='-'&&q.charAt(1)=='-')||(q.charAt(0)=='+'&&q.charAt(1)=='-')||(q.charAt(0)=='-'&&q.charAt(1)=='+')||(q.charAt(0)=='.')) { System.out.print("Wrong Format");//格式错误 System.exit(0); } else { p=Double.parseDouble(q); } return p; }
编程心得:
1、判断错误后要直接终止程序,不然程序继续运行会输出不需要的东西。
2、求字符串长度用length()方法,求数组长度用length方法;
4、用正则表达式来判断验证输入。
7-1 点与线(类设计)期中考试
-
设计一个类表示平面直角坐标系上的点Point,私有属性分别为横坐标x与纵坐标y,数据类型均为实型数,除构造方法以及属性的getter与setter方法外,定义一个用于显示信息的方法display(),用来输出该坐标点的坐标信息,格式如下:
(x,y)
,数值保留两位小数。为简化题目,其中,坐标点的取值范围设定为(0,200]
。若输入有误,系统则直接输出Wrong Format
-
设计一个类表示平面直角坐标系上的线Line,私有属性除了标识线段两端的点point1、point2外,还有一个字符串类型的color,用于表示该线段的颜色,同样,除构造方法以及属性的getter与setter方法外,定义一个用于计算该线段长度的方法getDistance(),还有一个用于显示信息的方法display(),用来输出线段的相关信息,输出格式如下:
``` The line's color is:颜色值 The line's begin point's Coordinate is: (x1,y1) The line's end point's Coordinate is: (x2,y2) The line's length is:长度值 ```
其中,所有数值均保留两位小数,建议可用
String.format("%.2f", data)
方法。设计类图如下图所示。
** 题目要求:在主方法中定义一条线段对象,从键盘输入该线段的起点坐标与终点坐标以及颜色,然后调用该线段的display()方法进行输出。
设计思路:
1、该题主要考察了对类图的分析理解,聚合的应用;
2、根据类图分别完成对Main、Point、Line类的编写,实现类图中的各种方法。
Point类:
class Point { private double x; private double y; Point() { } Point(double x,double y) { if((x>0&&x<=200)&&(y>0&&y<=200)) { this.y=y; this.x=x; } else { System.out.print("Wrong Format"); System.exit(0); } } double getX() { return this.x; } void setX(double x) { this.x=x; } double getY() { return this.y; } void setY(double y) { this.y=y; } void display() { System.out.print("("); System.out.printf("%.2f", this.x); System.out.print(","); System.out.printf("%.2f", this.y); System.out.println(")"); } }
编程心得
1、做题时需要看懂类图,了解聚合关系是如何实现的。
2、可对题目的类设计进行重构,以实现继承与多态的技术性需求。
7-2 点线面问题重构(继承与多态)期中考试
在“点与线(类设计)”题目基础上,对题目的类设计进行重构,以实现继承与多态的技术性需求。
类图
Plane类:
class Plane extends Element{ private String color; Plane() { } Plane(String color) { this.color=color; } String getColor() { return color; } void setColor(String color) { this.color=color; } @Override public void dispiay() { // TODO 自动生成的方法存根 System.out.print("The Plane's color is:"+this.color); } }
编程心得:
1、抽象类不能使用new操作符来初始化。
2、抽象父类的子类必须实现所有的抽象方法。
7-3 设计一个银行业务类(PTA大作业四)
2、根据题目要求编写BankBusiness类,按要求处理类中属性和方法的可见性。
代码实现:
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner in=new Scanner(System.in); BankBusiness.welcome(); BankBusiness account=new BankBusiness(in.next(),in.next()); account.deposit(in.next(), in.nextDouble()); account.withdraw(in.next(), in.nextDouble()); account.withdraw(in.next(), in.nextDouble()); account.withdraw(in.next(), in.nextDouble()); BankBusiness.welcomeNext(); } } class BankBusiness { public static String bankName="中国银行"; private String name; private String password; private double balance; BankBusiness() { } BankBusiness(String name,String password) { this.name=name; this.password=password; this.balance=0.0; } public static void welcome() { System.out.println(bankName+"欢迎您的到来!"); } public static void welcomeNext() { System.out.println("请收好您的证件和物品,欢迎您下次光临!"); } public void deposit(String password,double RMB)//存款 { if(password.equals(this.password)) { this.balance=RMB; System.out.println("您的余额有"+this.balance+"元。"); } else { System.out.println("您的密码错误!"); } } public void withdraw(String password,double RMB) { if(password.equals(this.password)&&this.balance>=RMB) { this.balance=this.balance-RMB; System.out.println("请取走钞票,您的余额还有"+this.balance+"元。"); } else if(password.equals(this.password)&&this.balance<RMB) { System.out.println("您的余额不足!"); } else if(!password.equals(this.password)) { System.out.println("您的密码错误!"); } } }
编程心得:
1、须理清楚不同修饰符的可见性
2、丰富BankBusiness类的功能,使其更加适用。
电信系列
设计思路:
1.通过正则表达式匹配处理字符串。
3.通过两个链表分别保存获取到的系数和指数,主要是最近用链表有点上头,java里的链表都是封装好了的,比c语言用起来顺手多了,毕竟add()方法就直接做好了尾接法,get()方法就直接能够返回指定下标的元素。(泛型才是永远滴神!)不过泛型的数据不能直接和int型的数字进行比较,所以我还是选择声明链表的数据类型为Integer类型。
重要代码:
public void answer(String callnumber,String date1,String time1,String date2,String time2) { CallRecord callrecord = new CallRecord(); callrecord.setCallingNumber(callnumber); callrecord.setAnswerNumber(number); DateFormat simpleFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); try { Date startdate = simpleFormat.parse(date1 + " " + time1); callrecord.setStartTime(startdate); } catch (ParseException e) { // TODO Auto-generated catch block } try { Date enddate = simpleFormat.parse(date2 + " " + time2); callrecord.setEndTime(enddate); } catch (ParseException e) { // TODO Auto-generated catch block } long calltime = (int)Math.ceil((callrecord.getEndTime().getTime() - callrecord.getStartTime().getTime()) / 1000.0 / 60); callrecord.setCalltime(calltime); balance = balance - calltime * 0.3; userRecords.addTotalAnswerRecords(callrecord); } }
实验二 类与对象(一)
1、阅读给出的部分代码和题目描述;
2、将给出的部分代码复制到eclipse中,修改部分错误添加四个类,再根据题目要求初步构思出运行流程
3、书写代码,首先保证无语法错误;
4、测试代码并修正代码中的可能错误和疏漏;
5、画出类图
编程心得:
1、运行中发现,未将“当农夫不在的时候狼会吃羊,羊会吃白菜”条件实现。导致狼羊过去后羊被吃了,羊和白菜过河后,白菜被吃了。
实验三 继承与多态(一)
1、 农夫过河问题:对之前的代码进行如下改进:
(1) 为之前的农民、狼、兔子、羊、白菜、胡萝卜类添加合适的父类。
(2) 为父类添加适合的属性和方法。并以此为基础修改原有的类,使之与添加的类构成继承关系。
(3) 使用多态改进整个代码,提高代码的复用性。
实验四 抽象类与接口(一)
1、 1、根据实验步骤中提出的要求,使用eclipse等开发工具编写相应的Java程序;
2、 编译、运行自己所编写的Java程序;
3、 根据编译与运行过程中所获得的错误信息修改程序直至获得正确的结果;
4、 记录实验中遇到的各类问题并以及解决办法。
实验四 抽象类与接口(二)
Boat类需要继承物品类,也就是说,Boat类即是交通工具,也是属于物品的一种,代码该做怎样的调整,编写代码并画出修改以后的类图。
实验小结
将交通工具类改成接口,再将船类的父类改为物品类即可达到修改要求。
修改时要注意:
1、接口的方法都是抽象方法,默认使用public abstract 修饰,不能修改。
2、接口的变量都是静态常量,默认使用public abstract final修饰,不能修改。
实验五
主要改动的一个是Main方法,把按钮的控制等等代码都加到这里面,其次则是class MaterialObject,class Game,
主要改动也是因为添加了按钮。
实验小结
能初步运用JavaFX的一些功能如使用图片、按钮。
但是还有许多地方没有优化好,下次会将程序进一步优化。
踩坑心得
第二次PTA——7-2 串口字符解第
1、判断错误后要直接终止程序,不然程序继续运行会输出不需要的东西。
2、求字符串长度用length()方法,求数组长度用length方法;
3、读懂题目很重要。
第三次PTA
1、学会题目所需要的数学知识,并将其转成代码形式。
2、理清题目要求的各种非法格式的条件。
改进建议:
1、完善代码中处理格式错误的方法。
2、完善代码中第四条和第五条的三角形运算。
第四次PTA
要学会正则表达式用来匹配字符串,没用正则表达式写题总是达不到满分。
期中考试
1、抽象类不能使用new操作符来初始化。
2、抽象父类的子类必须实现所有的抽象方法。
六、七、八次PTA----(电信收费)
处理好逻辑问题,梳理好思路。
按照题目给的类图编写出的代码复用度高,可以使后面需要加什么代码直接可以加上去,不用再去另外写新的代码了。
每一次的题目都是再之前的题目上增加功能,之前题目的正确性
实验二(农夫过河)
通过这次实验,我知道了应该在写代码之前先构思好,方便之后代码修改。
理解了类变量、类方法与实例变量、实例方法的区别。
通过给羊狼命名的编写理解了Java中方法重载的实现方式。
实验分为两个课时,第一个课时是简单的把四个类创建出来,然后定义相关属性;
第二个课时是将类的属性封装起来,然后加入相关方法。通过这次实验,更加明白构造函数的作用,并且学会使用eclipse中的码源创建带参数的构造函数;
private、protected、public在不同的位置表达什么不同的意思;在加入了Boat类后,让我充分明白重载函数;
通过移动Main,了解package语句的作用。总的来看这次实验并不难,只用到Java的第一个特性:
封装,才只是Java的一个开头,然后跟着实验步骤走,最后测试完成实验。
实验三(农夫过河)
通过这次实验,我知道了应该在写代码之前先构思好,方便之后代码修改。
学会了使用多态改进整个代码,提高代码的复用性。
进入不同的路径可用if来选择是否添加不同的游戏对象,进入不同路径
达到尽量不改变原有代码的要求
实验四(农夫过河)
这次实验是重构了实验二的 代码,加入了接口和抽象类,这样简化了代码,还简化了逻辑结构。
在实验中,我还用到了ArrayList和HashSet,同也对接口的使用有了更加深刻的了解,让我收获
最大的还是通过所提供的类图去编写代码,让我明白到了这样设计代码,可以降低了耦合度,
使代码在改进的过程中更加方便,不用大改。
实验五(农夫过河)
这次的实验用到了JAVAFX
能初步运用JavaFX的一些功能如使用图片、按钮。
但是还有许多地方没有优化好,下次会将程序进一步优化。
总结
经过这这个学期的学习,我觉得我的代码能力有明显的提升,当然有些地方也有些不足,同时自我学习能力也在学习的过程中加强,因为很多东西都是从同学网络上学习到的,在未来的日子里我也要加把劲。
我希望在未来的学习中我能够熟练地掌握java这门语言,能够独自完成一些较复杂的程序编写。通过多练习来提高自己的编程能力。将上课所学到的知识运用为自己实践练习的最佳工具。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~