oop Java作业总结

发布时间 2023-04-30 21:27:19作者: &0钊

前言:总结三次题目集的知识点、题量、难度等情况

不知不觉又完成三次pta的作业了。三次PDA的作业也就提现了这一个月来的学习情况。从课堂教学以及作业上都可以体现对Java的学习,不再只是简单的语法以及编程了,而是涉及到了许多编程的一些思想,模式。

第四次作业是这三次作业中做的最好的一次,但依然存在许多问题,比如在一些题目上得不到满分,就是因为我并没有仔细的去学习,去研究怎么使用HashMap,HashSet的用法。第一题的菜单计价程序也是因为看到大部分同学都没做,于是便草率的直接放弃了这30分。只去追求70分。给后面的第六次作业没有做完,埋下了伏笔。

第五次作业前面的题目使用了正则表达式,后面的日期迭代用到了类的聚合。第一次对于类的使用有了感触。

第六次作业,就直接拿了一个零分。由于之前没有写过这个代码。在之后的迭代中,便更不愿意去阅读、去理解这道题目这种畏难。偷懒。怕累的学习态度。对于我未来的学习无疑是一个巨大的问题。真的就是抱有侥幸的心理。加上身边的人也都没写。便更加肆无忌惮的偷懒。

设计与分析:重点对题目的提交源码进行分析,要有相应的解释和心得(做到有图有真相)

ps:由于两道7-1都未能完成。所以下面并未分析到。

题目4:7-5
7-5 面向对象编程(封装性)
分数 10
作者 蒋辉
单位 天津仁爱学院

Student类具体要求如下:
私有成员变量:学号(sid,String类型),姓名(name,String类型),年龄(age,int类型),专业(major,String类型) 。
提供无参构造和有参构造方法。(注意:有参构造方法中需要对年龄大小进行判定)
普通成员方法:print(),输出格式为“学号:6020203100,姓名:王宝强,年龄:21,专业:计算机科学与技术”。
普通成员方法:提供setXxx和getXxx方法。(注意:setAge()方法中需要对年龄进行判定)
注意:
年龄age不大于0,则不进行赋值。
print()中的“:”和“,”为均为中文冒号和逗号。

SourceMonitor 报表

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter Value
========= =====
Project Directory C:\Users\limbol\eclipse-workspace\bok\src\bok0\
Project Name
Checkpoint Name Baseline
File Name Main.java
Lines 74
Statements 53
Percent Branch Statements 3.8
Method Call Statements 15
Percent Lines with Comments 5.4
Classes and Interfaces 2
Methods per Class 6.00
Average Statements per Method 2.75
Line Number of Most Complex Method 61
Name of Most Complex Method Student.setAge()
Maximum Complexity 3
Line Number of Deepest Block 5
Maximum Block Depth 2
Average Block Depth 1.55
Average Complexity 1.17

--------------------------------------------------------------------------------------------
Most Complex Methods in 2 Class(es): Complexity, Statements, Max Depth, Calls

Main.main() 1, 17, 2, 14
Student.getAge() 1, 1, 2, 0
Student.getMajor() 1, 1, 2, 0
Student.getName() 1, 1, 2, 0
Student.getSid() 1, 1, 2, 0
Student.print() 1, 1, 2, 1
Student.setAge() 3, 4, 2, 0
Student.setMajor() 1, 1, 2, 0
Student.setName() 1, 1, 2, 0
Student.setSid() 1, 1, 2, 0
Student.Student() 1, 4, 2, 0
Student.Student() 1, 0, 0, 0

--------------------------------------------------------------------------------------------
Block Depth Statements

0 4
1 16
2 33
3 0
4 0
5 0
6 0
7 0
8 0
9+ 0
--------------------------------------------------------------------------------------------

 

 

PowerDesigner

 源代码:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //调用无参构造方法,并通过setter方法进行设值
        String sid1 = sc.next();
        String name1 = sc.next();
        int age1 = sc.nextInt();
        String major1 = sc.next();
        Student student1 = new Student();
        student1.setSid(sid1);
        student1.setName(name1);
        student1.setAge(age1);
        student1.setMajor(major1);
        //调用有参构造方法
        String sid2 = sc.next();
        String name2 = sc.next();
        int age2 = sc.nextInt();
        String major2 = sc.next();
        Student student2 = new Student(sid2, name2, age2, major2);
        //对学生student1和学生student2进行输出
        student1.print();
        student2.print();
    }
}

/* 请在这里填写答案 */
class Student{
    private String sid;
    private String name;
    private int age;
    private String major;
    public Student(){
        
    }
    public Student(String sid, String name, int age, String major) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.major = major;
    }
    public String getSid(){
        return sid;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public String getMajor(){
        return major;
    }
    public void setSid(String sid){
        this.sid = sid;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        if (age<0)
            age = 0;
        else
        this.age = age;
    }
    public void setMajor(String major){
        this.major = major;
    }
    public void print(){
        System.out.println("学号:"+sid+",姓名:"+name+",年龄:"+age+",专业:"+major); 
    }
    
}

本题体现了单一职责原则,将有关学生的方法单独拎出来作为一个类,并且通过学生一和学生二分别实现了,无参构造法和有参构造法。无参构造法,通过setter的方法将数据存入。有参构造法直接通过代入参数赋值。也是这道题之后,学会了利用编译软件自动生成set get方法和有参无参构造方法。

题目4:7-7
7-7 判断两个日期的先后,计算间隔天数、周数
分数 15
作者 吴光生
单位 新余学院

从键盘输入两个日期,格式如:2022-06-18。判断两个日期的先后,并输出它们之间间隔的天数、周数(不足一周按0计算)。

预备知识:通过查询Java API文档,了解Scanner类中nextLine()等方法、String类中split()等方法、Integer类中parseInt()等方法的用法,了解LocalDate类中of()、isAfter()、isBefore()、until()等方法的使用规则,了解ChronoUnit类中DAYS、WEEKS、MONTHS等单位的用法。

SourceMonitor 报表

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter Value
========= =====
Project Directory C:\Users\limbol\eclipse-workspace\bok\src\bok\
Project Name
Checkpoint Name Baseline
File Name Main.java
Lines 28
Statements 24
Percent Branch Statements 8.3
Method Call Statements 23
Percent Lines with Comments 14.3
Classes and Interfaces 1
Methods per Class 1.00
Average Statements per Method 18.00
Line Number of Most Complex Method 7
Name of Most Complex Method Main.main()
Maximum Complexity 3
Line Number of Deepest Block 8
Maximum Block Depth 2
Average Block Depth 1.54
Average Complexity 3.00

--------------------------------------------------------------------------------------------
Most Complex Methods in 1 Class(es): Complexity, Statements, Max Depth, Calls

Main.main() 3, 18, 2, 23

--------------------------------------------------------------------------------------------
Block Depth Statements

0 5
1 1
2 18
3 0
4 0
5 0
6 0
7 0
8 0
9+ 0
--------------------------------------------------------------------------------------------

 

 

 

源代码:

import java.util.Scanner;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class Main{
    public static void main(String[] args) {
       Scanner input = new Scanner(System.in);
       String time1 = input.nextLine();
       String time2= input.nextLine();
       int apday = 0; 
       int apweek = 0;
       String[] str1 = time1.split("-");
       String[] str2 = time2.split("-");//将-删除
       LocalDate fst = LocalDate.of(Integer.parseInt(str1[0]), Integer.parseInt(str1[1]), Integer.parseInt(str1[2]));
       LocalDate scd = LocalDate.of(Integer.parseInt(str2[0]),Integer.parseInt(str2[1]),Integer.parseInt(str2[2]));
       apday = (int) ChronoUnit.DAYS.between(fst, scd);//计算日期相隔
       apweek = (int) ChronoUnit.WEEKS.between(fst, scd);//计算相隔几周
       if(fst.isAfter(scd))//判断前后
           System.out.println("第一个日期比第二个日期更晚");
       if(fst.isBefore(scd))
           System.out.println("第一个日期比第二个日期更早");
       System.out.println("两个日期间隔" + Math.abs(apday) + "天");
       System.out.println("两个日期间隔" + Math.abs(apweek) + "周");
       input.close();
    }
}

本题学到一个点,就是有关数据处理。利用split将符号删去,把数据依次存入数组。

7-5 日期问题面向对象设计(聚合一)
分数 50
作者 段喜龙
单位 南昌航空大学

参考题目7-2的要求,设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1900,2050] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:

类图.jpg

应用程序共测试三个功能:

  1. 求下n天
  2. 求前n天
  3. 求两个日期相差的天数

注意:严禁使用Java中提供的任何与日期相关的类与方法,并提交完整源码,包括主类及方法(已提供,不需修改)

SourceMonitor 报表

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter Value
========= =====
Project Directory C:\Users\limbol\eclipse-workspace\bok\src\bok2\
Project Name 1
Checkpoint Name Baseline
File Name Main.java
Lines 420
Statements 283
Percent Branch Statements 24.0
Method Call Statements 223
Percent Lines with Comments 3.1
Classes and Interfaces 5
Methods per Class 8.60
Average Statements per Method 5.23
Line Number of Most Complex Method 387
Name of Most Complex Method DateUtil.getDaysofDates()
Maximum Complexity 15
Line Number of Deepest Block 25
Maximum Block Depth 4
Average Block Depth 2.25
Average Complexity 3.00

--------------------------------------------------------------------------------------------
Most Complex Methods in 5 Class(es): Complexity, Statements, Max Depth, Calls

DateUtil.checkInputValidity() 6, 7, 4, 18
DateUtil.compareDates() 8, 8, 2, 40
DateUtil.DateUtil() 1, 3, 2, 3
DateUtil.DateUtil() 1, 0, 0, 0
DateUtil.equalTwoDates() 5, 4, 2, 14
DateUtil.getDay() 1, 1, 2, 0
DateUtil.getDaysofDates() 15, 25, 3, 22
DateUtil.getNextNDays() 11, 27, 4, 26
DateUtil.getPreviousNDays() 12, 32, 4, 28
DateUtil.setDay() 1, 1, 2, 0
DateUtil.showDate() 1, 1, 2, 1
Day.Day() 1, 3, 2, 2
Day.Day() 1, 2, 2, 0
Day.Day() 1, 0, 0, 0
Day.dayIncrement() 3, 5, 3, 4
Day.dayReduction() 3, 5, 3, 2
Day.getMonth() 1, 1, 2, 0
Day.getValue() 1, 1, 2, 0
Day.resetMax() 1, 3, 2, 1
Day.resetMin() 1, 1, 2, 0
Day.setMonth() 1, 1, 2, 0
Day.setValue() 1, 1, 2, 0
Day.validate() 7, 6, 3, 13
Main.main() 12, 52, 4, 44
Month.getValue() 1, 1, 2, 0
Month.getYear() 1, 1, 2, 0
Month.Month() 1, 2, 2, 1
Month.Month() 1, 0, 0, 0
Month.monthIncrement() 3, 5, 3, 2
Month.monthReduction() 3, 5, 3, 2
Month.resetMax() 1, 1, 2, 0
Month.resetMin() 1, 1, 2, 0
Month.setValue() 1, 1, 2, 0
Month.setYear() 1, 1, 2, 0
Month.validate() 4, 4, 2, 0
Year.getValue() 1, 1, 2, 0
Year.isLeapYear() 5, 4, 2, 0
Year.setValue() 1, 1, 2, 0
Year.validate() 4, 4, 2, 0
Year.Year() 1, 1, 2, 0
Year.Year() 1, 0, 0, 0
Year.yearIncrement() 1, 1, 2, 0
Year.yearReduction() 1, 1, 2, 0

--------------------------------------------------------------------------------------------
Block Depth Statements

0 7
1 51
2 117
3 81
4 27
5 0
6 0
7 0
8 0
9+ 0
--------------------------------------------------------------------------------------------

 

 

PowerDesigner

 源代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int year = 0;
        int month = 0;
        int day = 0;

        int choice = input.nextInt();

        if (choice == 1) { // test getNextNDays method
            int m = 0;
            year = Integer.parseInt(input.next());
            month = Integer.parseInt(input.next());
            day = Integer.parseInt(input.next());

            DateUtil date = new DateUtil(year, month, day);

            if (!date.checkInputValidity()) {
                System.out.println("Wrong Format");
                System.exit(0);
            }

            m = input.nextInt();

            if (m < 0) {
                System.out.println("Wrong Format");
                System.exit(0);
            }

            System.out.print(date.getDay().getMonth().getYear().getValue() + "-" + date.getDay().getMonth().getValue()+ "-" + date.getDay().getValue() + " next " + m + " days is:");
            System.out.println(date.getNextNDays(m).showDate());
        } 
        else if (choice == 2) { // test getPreviousNDays method
            int n = 0;
            year = Integer.parseInt(input.next());
            month = Integer.parseInt(input.next());
            day = Integer.parseInt(input.next());

            DateUtil date = new DateUtil(year, month, day);

            if (!date.checkInputValidity()) {
                System.out.println("Wrong Format");
                System.exit(0);
            }

            n = input.nextInt();

            if (n < 0) {
                System.out.println("Wrong Format");
                System.exit(0);
            }

            System.out.print(date.getDay().getMonth().getYear().getValue() + "-" + date.getDay().getMonth().getValue()+ "-" + date.getDay().getValue() + " previous " + n + " days is:");
            System.out.println(date.getPreviousNDays(n).showDate());
        } 
        else if (choice == 3) {    //test getDaysofDates method
            year = Integer.parseInt(input.next());
            month = Integer.parseInt(input.next());
            day = Integer.parseInt(input.next());

            int anotherYear = Integer.parseInt(input.next());
            int anotherMonth = Integer.parseInt(input.next());
            int anotherDay = Integer.parseInt(input.next());

            DateUtil fromDate = new DateUtil(year, month, day);
            DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay);

            if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
                System.out.println("The days between " + fromDate.showDate() + 
                        " and " + toDate.showDate() + " are:"
                        + fromDate.getDaysofDates(toDate));
            } else {
                System.out.println("Wrong Format");
                System.exit(0);
            }
        }
        else{
            System.out.println("Wrong Format");
            System.exit(0);
        }        
    }

}

            
    class Day{
        
        private Month month = new Month();
        private int value;
        int monthMax[] = {31,28,31,30,31,30,31,31,30,31,30,31};
        public Day() {
            
        }
        
        public Day(Month month, int value) {
            
            this.month = month;
            this.value = value;
        }

        public Day(int yearValue, int monthValue, int dayValue) {
            this.getMonth().getYear().setValue(yearValue);
            this.getMonth().setValue(monthValue);
            this.value = dayValue;
            
        }
        public Month getMonth() {
            return month;
        }
        public void setMonth(Month month) {
            this.month = month;
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value = value;
        }
        public void resetMin() {
            value = 1;
        }
        public void resetMax() {
            getMonth().monthReduction();;
            value = monthMax[getMonth().getValue()-1];
        }//日期改为上月最大值
        
        public boolean validate(){
            if(getMonth().getYear().isLeapYear())
                monthMax[1]=29;
            if(getMonth().getValue() >0&& getMonth().getValue()<13&&getMonth().getYear().getValue()>=1900 && getMonth().getYear().getValue()<=2050 ) {
                if(value<=monthMax[getMonth().getValue()-1]&&value>0)
                    return true;
            }           
                return false;          
        }
        
        public void dayIncrement() {
               if(value == monthMax[getMonth().getValue()-1]) {
                   getMonth().monthIncrement();
                   resetMin();
               }
               else
                   value = value++;
                   
           }//日期加1
           public void dayReduction() {
               if(value == 1) {
                   getMonth().monthReduction();
                   resetMax();
               }
               else
                   value = value--;
           }//日期减1
        
        
    }
    
    
    class Month{
        private Year year=new Year();
        private int value;
        public Month() {
            
        }
        public Month(int yearValue, int monthValue) {            
            this.getYear().setValue(yearValue);
            this.value = monthValue;
        }
        public Year getYear() {
            return year;
        }
        public void setYear(Year year) {
            this.year = year;
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value = value;
        }
        public void resetMin() {
            value = 1;
        }
        public void resetMax() {
            value = 12;
        }
        
        public boolean validate(){
            if(value > 0 && value<13  ) 
                return true;
            else
                return false;  
        }
        public void monthIncrement() {
               if(value == 12) {
                   
                   getYear().yearIncrement();
                   resetMin();
               }
               else
                   value = value++;
                   
           }//月份加1
           public void monthReduction() {
               if(value == 1) {
                   getYear().yearReduction();
                   resetMax();
               }
               else
                   value = value--;
           }//月份减1
              
    }
    
    
    class Year{
        private int value;        
        public Year() {
            
        }
        public Year(int value) {            
            this.value = value;
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value = value;
        }
        public boolean isLeapYear(){
            if(value%400==0||(value%4==0&&value%100!=0))
                return true;
            else
                return false;
           }
        public boolean validate(){            
            
            if(value>=1900&&value<=2050 )
                return true;
            else
                return false; 
        }
           public void yearIncrement() {
               value = value++;
           }//年份加1
           public void yearReduction() {
               value = value--;
           }//年份减1
    }
    

    
    class DateUtil{
  
        private Day day;
        
        int a[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        
        public DateUtil(){
        }
       
       

        public DateUtil(int y, int m, int d) {
            this.getDay().getMonth().getYear().setValue(y);
            this.getDay().getMonth().setValue(m);
            this.getDay().setValue(d);
            
        }

        
        public Day getDay(){
            return day;
        }
        
        public void setDay(Day d){
            day=d;
        }
        
        public boolean checkInputValidity(){
            
            if(getDay().getMonth().getYear().isLeapYear())
                a[2]=29;
            if(getDay().getMonth().getYear().validate())
            if(getDay().getMonth().validate()   ) {
                if(getDay().getValue()<=a[getDay().getMonth().getValue()]&&getDay().getValue()>0)
                    return true;
            }
            return false;  
        }
   
        public boolean compareDates(DateUtil date) {
            if(getDay().getMonth().getYear().getValue()>date.getDay().getMonth().getYear().getValue())
                return true;
            if(getDay().getMonth().getYear().getValue()==date.getDay().getMonth().getYear().getValue() && getDay().getMonth().getValue()>date.getDay().getMonth().getValue())    
                return true;
            if(getDay().getMonth().getYear().getValue()==date.getDay().getMonth().getYear().getValue() && getDay().getMonth().getValue()==date.getDay().getMonth().getValue() && getDay().getValue()>date.getDay().getValue())
                return true;
            else
                return false;
        }//比较日期大小
        
        public boolean equalTwoDates(DateUtil date) {
            if(getDay().getMonth().getYear().getValue()==date.getDay().getMonth().getYear().getValue() && getDay().getMonth().getValue()==date.getDay().getMonth().getValue() && day==date.day)
                return true;
            else
                return false;
        }//比较日期是否相等
        
        public String showDate() {
            return (getDay().getMonth().getYear().getValue()+"-"+getDay().getMonth().getValue()+"-"+day);            
        }//日期格式化
        
        public DateUtil getNextNDays(int n) {
            
            for(;n>366;) {
                getDay().getMonth().getYear().yearIncrement();
                if(getDay().getMonth().getYear().isLeapYear())
                    n=n-366;
                else n=n-365;    
            }
            for(;n>31;) {
                if(getDay().getMonth().getYear().isLeapYear())
                    a[2]=29;
                n=n-a[getDay().getMonth().getValue()];
                getDay().getMonth().monthIncrement();;
                if(getDay().getMonth().getValue()>12) {
                    getDay().getMonth().getYear().yearIncrement();;
                    getDay().getMonth().resetMin();;
                }
            }    
            if(getDay().getValue()+n>a[getDay().getMonth().getValue()]) {
                if(getDay().getMonth().getYear().isLeapYear())
                    a[2]=29;
                for(int i =0;i<n;i++)
                    getDay().dayIncrement();
            }
            else
                for(int i =0;i<n;i++)
                    getDay().dayIncrement();;
            return this;
  
        }
        
        public DateUtil getPreviousNDays(int n){
            for(;n>366;) {
                getDay().getMonth().getYear().yearReduction();;
                if(getDay().getMonth().getYear().isLeapYear())
                    n=n-366;
                else n=n-365;
                
            }
            for(;n>31;) {
                if(getDay().getMonth().getYear().isLeapYear())
                    a[2]=29;
                n=n-a[getDay().getMonth().getValue()-1];
                getDay().getMonth().monthReduction();;
                if(getDay().getMonth().getValue()<2) {
                    getDay().getMonth().getYear().yearReduction();;
                    getDay().getMonth().monthIncrement();;
                }
            }    
            if(getDay().getValue()-n<=0) {
                if(getDay().getMonth().getYear().isLeapYear())
                    a[2]=29;
                if(getDay().getMonth().getValue()==1) {
                    getDay().getMonth().getYear().yearReduction();;
                    getDay().getMonth().resetMax();;
                    for(int i =0;i<n;i++)
                        getDay().dayReduction();    
                }
                
            }
            else
                for(int i =0;i<n;i++)
                    getDay().dayReduction();
            return this;
        }
        
        
        public int getDaysofDates(DateUtil date) {
            int n=0;
            int m=0;
            int x=0;
            for(int i=1;i<getDay().getMonth().getYear().getValue();i++) {
                if(i%400==0||(i%4==0&&i%100!=0))
                    n=n+366;
                else n=n+365;    
            }
            if(getDay().getMonth().getYear().isLeapYear())
                 a[2]=29;
            for(int i=1;i<getDay().getMonth().getValue();i++)
                n=n+a[i];
            n=n+getDay().getValue();
            
            for(int i=1;i<date.getDay().getMonth().getYear().getValue();i++) {
                if(i%400==0||(i%4==0&&i%100!=0))
                    m=m+366;
                else m=m+365;    
            }
            if(getDay().getMonth().getYear().isLeapYear())
                 a[2]=29;
            for(int i=1;i<date.getDay().getMonth().getValue();i++)
                m=m+a[i];            
            m=m+date.getDay().getValue();
            
            x=Math.abs(m-n);
            return x;
        }
    }
        
       
    

 

采坑心得:

 最不甘的一个点就在于7-7上,我几乎把所有的地方能改的都改了,但是最后依旧并跑不出来,这道题确实也太长了,当时也并没有特别熟练的利用debug,并且时间也不够了。就导致最后这道题只拿了零分。其实还是自己不够重视这道题,没有预留充足的时间,还是觉得自己改一改就就可以,只是一个简单的迭代,没想到自己改完之后实在是跑不出来,最终发现是底层代码逻辑有问题,也没有时间去改了。

改进建议:

希望自己能有迎难而上的勇气。水滴终会石穿,再大的题目,其实每天写写一点,几千行代码也能写出来的。怕的就是永远的拖拉,到最后直接就放弃不写了。

总结:

从第四次作业已经可以看出我在学习上已经开始偷懒了。开始像学习C语言一样,对付每一道题都想用最初学的办法,而不想再去学习更多新的方法,不想去完成一些具有挑战意义的事情。对一些难题。不愿意去做只去追求及格60的结果,就是到最后拿零分。第五次作业又是因为偷懒犯了一个大错,第五次作业的第六题涉及到之前代码的迭代,我竟然直接拿之前的代码进行提交,想要先看一下能混多少分,没想到直接拿了满分。但是由于我根本没有进行过迭代,这个的满分并达不到题目的要求,实际上是拿了零分。并且就因为第二题只值一分,我便直接没有做这道题目。现在回想起来,处处体现着我的懒惰。

总结一下这一个月的学习是一个愈发偷懒的过程,希望未来的一个月能够摆正自己的态度,吃得下苦,去面对更难的题目。毕竟现在的一些题已经越来越看不懂了,只有真正学到自己手里的本事,才是真本事