OOP第一次博客作业
一、关于Java&&面向对象
本学期刚开始进行Java的学习,也是刚开始了解面向对象,目前也就学习了三四周的样子,期间进行了三次作业,我感觉到Java的语法和c语言中的有许多相似之处,又不是完全相同,它有它自己的特色。
二、三次PTA作业
1.第一次pta作业
第一次作业总共八道题,由于刚开始,老师可能不太像打击我们,题目比较简单,参考教材上相应知识点通过自学就可以完成所有题目,我们需要自学数值数据类型和操作、if else语句,while循环,字符串以及一维数组,此自学内容由于之前学习过c语言,所以自学起来还是很容易理解和掌握的,要说有难度的就是最后一题,判断三角形的类型。此题考察选择语句与你的思维逻辑能力。(题目看下图)
出现过的BUG:
1.判断等腰直角三角形,浮点型的判断未用估计精度值来做判断
2.进入其中一种情况后,输出后没有退出程序,进行了其他判断
3.多层嵌套也出现了问题
不足:
if的嵌套过于多了,。。。就是if到底,圈复杂度太高了(垃圾代码),之后可以做优化。(看下图)
疯狂使用if语句,使得圈复杂度过于高,这都是纯体力劳动来的代码。
2.第二次PTA
第二次题目集作业总共包括五道题,包括ip地址转化,合并两个有序数组,判断闰年及星期几,求下一天及求前N天。题目集主要考察类与对象,同时让我们熟悉使用String类型,数组,以及选择语句,和循环语句。难度较上一次有小小的提升。
7-3 判断闰年及星期几
该题与第一次题目集最后一题相比,没有大量使用if语句,而是改换成了switch语句,switch语句在这题中大量使用,if语句也有少量的使用,复杂度依旧高的惊人。
在Main类中我也使用了较多的方法去实现不同的功能
public static void main(String[] args);//主方法;
public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型;
public static int numOfDays(int year,int month ,int day) ;//求出year-month-day到0001-1-1的距离天数,返回整型数;
public static String getWhatDay(int days) ; //根据天数返回星期几,其中参数days为天数,整型数,返回星期几的英文单词。
遇到的bug:
1.没有考虑到非法输入的情况。
2.没有将闰年的2月加上一天。
3.返回boolean型时是空
7-4求下一天
由于上一题复杂度较高,我将switch语句改写,降低了它的复杂度。
本题创建了一个类,
用如下代码改写:
public static boolean isLeapYear(int year){
boolean flag1=(year%4==0);
boolean flag2=(year%100!=0);
boolean flag3=(year%400==0);
boolean isLeapYear=((flag1&&flag2)||(flag3));
return isLeapYear;
}
public static boolean checkInputValidity(int year,int month,int day) {
int tianshu[]=new int[] { 31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year)) {
tianshu[1]=29;
}
先用public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型;采用数组的方式将每个月的总天数存起来,判断该年如果为闰年,则将二月份的天数改为29天,这远远降低了复杂度,就不需要用大量的选择语句去判断。
同样的,这道题我也使用了一些方法
public static void main(String[] args);//主方法 public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型 public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值 public static void nextDate(int year,int month,int day) ; //求输入日期的下一天
7-5 求下N天
求下N天就只需要考虑其他的特殊月份,比如跨年的测试,闰年3月初,平年3月初,8月初,9月初,求下n天平年2月,求下n天闰年2月,求下n天闰年12月等。其他和上一题求下一天类似。
3.第三次PTA
本次题目集总共有三道题,题目数量较少,但是对我来说题目还是比较难的。第一题为创建一个账户类,第二题为创建一个日期类,第三题为一元多项式求导。
7-1 创建账户类Account
本题创建了一个类:
具体包括:
id:账号,私有属性,整型,默认值为0;balance:余额,私有属性,实型,默认值为0;annualInterestRate:当前利率,私有属性,实型,默认值为0,假设所有帐户均有相同的利率;dateCreated:账户开户时间,私有属性,LocalDate类型,默认为2020年7月31日;一个能创建默认账户的无参构造方法;一个能创建带特定id和初始余额的账户的构造方法;id、balance、annualInterstRate的getter及setter方法;dateCreated的getter方法;一个名为getMonthlyInterestRate()的方法返回月利率(月利率计算公式:余额*(年利率/1200));一个名为withDraw的方法从账户提取特定数额,当提取数额大于余额或为负数系统返回WithDraw Amount Wrong
提示;一个名为deposit的方法向账户存储特定数额,当存储数额大于20000元或为负数系统返回Deposit Amount Wrong
提示。
public class Main {
private int id;
private static double balance;
private static double annualInterestRate;
private Date dateCreated;
public Main() {
super();
dateCreated=new Date();
id=0;
balance=0;
annualInterestRate=0;
}
public Main(int id, double balance,double annualInterestRate) {
super();
dateCreated=new Date();
this.id = id;
this.balance = balance;
this.annualInterestRate=annualInterestRate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public Date getDateCreated() {
return dateCreated;
}
public boolean withDraw(double money){
if(balance>=money&&money>=0){
balance -= money;
return true;
}
else
return false;
}
public boolean deposit(double money){
if(money>= 0&&money<=20000){
balance += money;
return true;
}
else
return false;
}
public static double getMonthlyInterestRate() {
return balance*(annualInterestRate/1200);
}
本题需要对类有充分的理解,明白且正确使用类的封装
7-3一元多项式求导
本题很难,在这道题上花费的时间比较长,这也是我们第一次接触正则表达式相关的知识,题目中涉及到表达式正确性的校验需要用正则表达式来进行,如果用if语句来判断的话,工作量太大,不一定写的完,所以在写这道题之前,我先自学了正则表达式的相关内容。到最后,我也没有全部通过测试点,在题目集结束后,我去问我完成的同学,很多同学都是强拆的,写了一百多行,也有更多的。题目在输入格式和输出格式上的要求也比较多。
我连前面的系数以及后面的指数都没有提取出来。
代码复杂度也比较高。
总结与心得
类与对向的理解:
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类:类是一个模板,它描述一类对象的行为和状态。
类的封装的优点:1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节。(私有属性)
正则表达式:
正则表达式有各种匹配规则。
对课堂模式的看法与建议:课堂采取的是线上线下相结合的模式。线上需自学相关Java内容,老师根据题目的完成情况讲解同学们所产生的各种问题, 这种课堂模式还是比较好的,大大增强了课堂效率。
收获:代码的编写过程一定要严谨,数据的处理也是十分重要的 ,一定要去测试代码,测试代码输入的合理性,这也是题目涉及到的非法输入的测试点。通过SourceMonitor我也知道了代码需要不断的优化,解决代码在提交时产生的运行超时的问题,所以优化代码也是十分重要的。三次作业 难度是逐步上升的 ,很多东西需要自学,这样也养成了自学的习惯和学会翻阅资料等。做题只靠老师讲的知识 远远不够,需要我们自己去查找资料。
OOP第一次博客作业的更多相关文章
- OO第一次博客作业
OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- [BUAA软工]第一次博客作业---阅读《构建之法》
[BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
- Java第一次博客作业
第一次博客作业 目录 三次作业题目详情 作业中的错误分析 感想与心得 题目详情 题目1:第一次作业: 类图: 题目2 类图: 题目3 类图: 题目4 题目5 题目6 类图: 题目7 类图: 题目8 第 ...
- 第一次博客作业 <西北师范大学| 周安伟>
1.助教博客链接:https://home.cnblogs.com/u/zaw-315/ 2.本周点评的作业数:3份,有留言互动. 3.本周点评有困难的地方: https://www.cnblogs ...
- C语言第一次博客作业——输入输出格式
一.PTA实验作业 注意:本次PTA实验共有8个题目,在博客上只要贴:4个题目就可以,分别为: 题目1:7-3 温度转换 (1分) 题目2:7-4 将x的平方赋值给y (2分) 题目3:7-6 是不是 ...
- C语言第一次博客作业—输入输出
一.PTA实验作业 题目1:7-3 温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1 ...
- OO第一次博客作业--第一单元总结
OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...
- OO第一次博客作业(第一单元总结)
Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的? A:红的,强测全WA了,能不红么. 菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧. 程序结构简析 三次实验的核心结构都是差不多 第一次的 ...
随机推荐
- GPU 加速 & WebGL
GPU 加速 & WebGL 开启 GPU 加速, 硬件加速 垃圾面试官,瞎忽悠 holy shit 美国想象力英语,前端 leader WebGL 加速 ??? 是什么鬼 ??? three ...
- node.js & Unbuntu Linux & nvm & npm
node.js & Unbuntu Linux & nvm & npm https://websiteforstudents.com/install-the-latest-no ...
- 揭秘高倍矿币 Baccarat BGV,为何NGK DeFi的财富效应如此神奇?
作为区块链4.0代表的NGK公链,这次也将借助它自己的DeFi版块NGK Baccarat,开启属于它自己的千倍财富之旅. 如果说,比特币能让没有银行账户的人,可以在全球任何时间.地点都能自由进行交易 ...
- 生成类库项目时同时生成的pdb文件是什么东东?
英文全称:Program Database File Debug里的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码.可以对程序的调试配置进行增量链接.Release 里的PDB是p ...
- Jmeter beanshell编程实例
1.引言 BeanShell是一种小型的,免费的,可嵌入的符合Java语法规范的源代码解释器,具有对象脚本语言特性. 在Jmeter实践中,由于BeanShell组件较高的自由度,通常被用来处理较为复 ...
- http接口的学习(暂时只是记录,测试之后重新更新)
链接1:https://blog.csdn.net/java173842219/article/details/54020168 链接2:https://blog.csdn.net/u01132074 ...
- Linux-两种磁盘分区方式
Linux文件设备 要理解Linux,首先要理解Linux文件结构 在Linux操作系统中,几乎所有的设备都位于/dev目录中 名称 作用 位置 SATA接口 电脑硬盘接口 /dev/sd[a-p] ...
- 使用 xunit 编写测试代码
使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...
- Django-1.11中文文档——操作关联对象
关联对象参考 写在最前面--基础示例模型如下: from django.db import models class Blog(models.Model): name = models.CharFie ...
- 从客流统计到营销赋能,Re-ID加速实体商业数字化转型 | 爱分析洞见
2020年中国实体商业受到突发疫情的重大影响.以危机为契机,实体商业加速数字化转型,利用创新应用服务自身业务.在此阶段,基于Re-ID(Person Re-identification,即行人再识别) ...