一、关于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第一次博客作业的更多相关文章

  1. OO第一次博客作业

    OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...

  2. oo 第一次博客作业

    oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...

  3. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  4. Java第一次博客作业

    第一次博客作业 目录 三次作业题目详情 作业中的错误分析 感想与心得 题目详情 题目1:第一次作业: 类图: 题目2 类图: 题目3 类图: 题目4 题目5 题目6 类图: 题目7 类图: 题目8 第 ...

  5. 第一次博客作业 <西北师范大学| 周安伟>

     1.助教博客链接:https://home.cnblogs.com/u/zaw-315/ 2.本周点评的作业数:3份,有留言互动. 3.本周点评有困难的地方: https://www.cnblogs ...

  6. C语言第一次博客作业——输入输出格式

    一.PTA实验作业 注意:本次PTA实验共有8个题目,在博客上只要贴:4个题目就可以,分别为: 题目1:7-3 温度转换 (1分) 题目2:7-4 将x的平方赋值给y (2分) 题目3:7-6 是不是 ...

  7. C语言第一次博客作业—输入输出

    一.PTA实验作业 题目1:7-3 温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1 ...

  8. OO第一次博客作业--第一单元总结

    OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...

  9. OO第一次博客作业(第一单元总结)

    Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的? A:红的,强测全WA了,能不红么. 菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧. 程序结构简析 三次实验的核心结构都是差不多 第一次的 ...

随机推荐

  1. TypeORM Entity

    TypeORM Entity Entity Entity is a class that maps to a database table when using SQL database(or col ...

  2. 以太坊手续费上涨,矿工出逃,VAST前景向好!

    根据最新数据显示,以太坊的Gas费用在最近几天大幅飙涨,尤其是在过去2小时内,增幅约20%,一度达到了17.67美元.而这也导致了,许多基于以太坊协议的相关项目无法被生态建设者使用,很多矿工也纷纷出逃 ...

  3. MySQL切换版本踩坑记录(包括恢复数据方法)

    踩坑起因:在创建数据库时, 字段:create_time datetime DEFAULT CURRENT_TIMESTAMP, 报异常--Error Code: 1067 - Invalid def ...

  4. 01、初识Java

    目录 前言 一.认识Java 历史介绍 Java介绍 二.认识及安装JDK 1.认识JDK 2.安装JDK 配置与测试 配置注意及不生效解决 3.认识Java虚拟机 三.Java的工作方式 四.jav ...

  5. 15_MySQL·WHERE子句中条件执行的顺序

  6. Vue学习笔记-Vue.js-2.X 学习(一)===>基本知识学习

    一  使用环境: windows 7 64位操作系统 二  IDE:VSCode/PyCharm 三  Vue.js官网: https://cn.vuejs.org/ 四  下载安装引用 方式1:直接 ...

  7. GPU 总结

    What features of GPUs allow them to perform computations faster than a typical CPU? GPUs have a mass ...

  8. DRF简介/接口概念

    目录 一.drf框架简介 1. drf安装 2. drf的优势 二.接口 1. 接口的概念 2. 接口文档 3. 接口规范(restful) 3.1 url链接规范 3.2 请求方式规范 3.3 响应 ...

  9. PAT-1018(Public Bike Management)最短路+额外条件+所有最短路中找出满足条件的路径+dijkstra算法

    Public Bike Management PAT-1018 使用一个vector来存储所有最短路的前驱结点,再通过使用dfs和一个额外的vector记录每一条路径 #include<iost ...

  10. OpenGL中的坐标系统详细概括:包括Z缓冲

    一: 首先就是关于几个坐标系统的概括: 局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标. 下一步是将局部坐标变换为世界空间坐标,世界空间坐标是处于一个更大的空间范围的.这些坐标相对于世界的全局 ...