一、关于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. Recoil & React official state management

    Recoil & React official state management Redux Recoil.js https://recoiljs.org/ A state managemen ...

  2. API 授权 All In One

    API 授权 All In One 身份验证 授权类型 身份验证类型 继承认证 没有认证 API密钥 不记名令牌 基本认证 摘要授权 OAuth 1.0 OAuth 2.0 授权码 隐含的 密码凭证 ...

  3. css & focus-within & pseudo class

    css & focus-within & pseudo class demo :focus-within https://developer.mozilla.org/en-US/doc ...

  4. yarn create & npx & npm init

    yarn create & npx & npm init https://www.npmtrends.com/npm-vs-npx-vs-yarn demo https://www.n ...

  5. Web API & Element & DOM

    Web API & Element & DOM Element https://developer.mozilla.org/en-US/docs/Web/API/Element HTM ...

  6. react UI 框架对比

    传送门  https://blog.csdn.net/qiqingjin/article/details/79219206 点击

  7. js 表格插入指定行

    js在table指定tr行上或下面添加tr行 function onAddTR(trIndex)         {             var tb = document.getElementB ...

  8. Java中base64与byte[]转换

    1.base64转byte[] 导包: import java.util.Base64 转换: String base64Str = base64的字符串; byte[] bytes = Base64 ...

  9. java的基础知识

    编写一个hello,world public  class  Hello{    public static void main(String[] arge){        System.out.p ...

  10. 9.Vue之webpack打包基础---模块化思维

    主要内容: 1. 什么是模块化思维? 2.  ES6包的封装思想 一.什么是模块化思维呢? 现实工作中, 一个项目可能会有多个人同时开发. 然后, 将所有人开发的内容, 合并到一个文件中. 比如: 1 ...