傲娇小闹钟

导航

Blog作业01

目录

前言

设计与分析

踩坑心得

改进建议

总结

前言

这三次作业的知识点覆盖的很全面,从最开始的int赋值变量,循环,到Boolean值,sort等一些函数,到后来的对象,类的创建和声明,getter,setter的方法运用,正则表达式的使用,知识点涉及的比较广。题量和难度比较契合,题目难的时候,题量也会适当下调,题量也没有超过十道题,对于一个星期的期限来说还是很合理。对我来说也能及时完成,总之还是很合理。

题目集1

输入三角形三条边,判断该三角形为什么类型的三角形。

题量:8道

难度:适中

题目集2

题量:5道

 

输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法。

要求:Main类中必须含有如下方法,签名如下:

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) ; //求输入日期的下一天

输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法。

难度:适中

题目集3

题量:3道

定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法,否则按0分处理。

 

编写程序性,实现对简单多项式的导函数进行求解

要求:Date类结构如下图所示:

  1. 如果输入表达式不符合上述表达式基本规则,则输出“Wrong Format”。
  2. 如果输入合法,则在一行内正常输出该表达式的导函数,注意以下几点: 结果不需要排序,也不需要化简;
  • 当某一项为“0”时,则该项不需要显示,但如果整个导函数结果为“0”时,则显示为“0”;
  • 当输出结果第一项系数符号为“+”时,不输出“+”;
  • 当指数符号为“+”时,不输出“+”;
  • 当指数值为“0”时,则不需要输出“x^0”,只需要输出其系数即可。

难度:较难

设计与分析

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 import java.util.Scanner;

 public class Main {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        double a = input.nextDouble();
        double b = input.nextDouble();
        double c = input.nextDouble();
       
        if(a >200 || b > 200 || c >200 || a < 1 || b < 1 || c < 1)
            
            System.out.println("Wrong Format");
            
        else{
            
            if(a >= b + c || b >= a + c || c >= a + b)
               System.out.println("Not a triangle");
               
            else if((a*a + b*b == c*c||  b*b + c*c == a*a|| a*a + c*c == b*b)&&a!=b&&b!=c&&a!=c)
               System.out.println("Right-angled triangle");
                
           else if(a == b || b == c || a == c)
            {if(a*a + b*b - c*c<0.000001||  b*b + c*c -a*a<0.000001|| a*a + c*c- b*b<0.000001) System.out.println("Isosceles right-angled triangle");
             else if(a == b && b == c)System.out.println("Equilateral triangle");
             else  System.out.println("Isosceles triangle");
             }
            else System.out.println("General triangle");
            
            }
       
        }
}

 

 

 

 

import java.util.Scanner;

public class Main {
    
    public static boolean isLeapYear(int year) {
    if(year % 4 == 0 && year % 100 !=0 ||year % 400 == 0)
    {
    return true;
    }
    else
    {
        return false;
    }
}

    
    public static boolean checkInputValidity(int year,int month,int day) {
            int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
            if(isLeapYear(year)==true)
                arr[2] = 29;
            if(year>=1820&&year<=2020&&month>0&&month<=12&&day<=arr[month]&&day>0)
                return true;
        else
            return false;
    }
    
    public static void nextDate(int year,int month,int day) {
    
        int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(isLeapYear(year)==true)
            arr[2] = 29;
        int a = 0,b = 0,c = 0;
        if(checkInputValidity(year,month,day)==true) {
            if(month==12) {
                if(day==arr[month]) {
                a = year+1;
                b = 1;
                c = 1;}
            if(day>0&&day<arr[month]) 
                    {a = year;
                    b = month;
                    c =day +1;
                    }
            }
            if(month<12) {
                if(day==arr[month]) {
                    a = year;
                    b = month + 1;
                    c = 1;}
                if(day>0&&day<arr[month]) 
                        {a = year;
                        b = month;
                        c = day+1;
                        }
            }
            System.out.println("Next date is:"+a+"-"+b+"-"+c);
            }
        else System.out.println("Wrong Format");
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Main x = new Main();
        int year = in.nextInt();
        int month = in.nextInt();
        int day = in.nextInt();
        x.nextDate(year,month,day);

    }

}

 

import java.util.Scanner;
public class Main{
     public static boolean checkInputValidity(int year,int month,int day,boolean r){
            boolean p;
            p = true;
            if(year < 1820 || year > 2020 || month < 1 || month > 12 || day < 1 || day > 31 ){
            p = false;
            }
            if(!r && day > 28){
                p = false;
            }
            return p;
        }
        public static void nextDate(int year,int month,int day,boolean r,int n){
            int i = month,x = day;
            day = x + n;
            
            if(!r&&i==2){
                if(x + n>28){
                     day = x + n-28;
                     month++;
                }
            }
            
            
            
            if(r&&i==2){
                if(x + n>29){
                    
                     day = x + n-29;
                    
                    month++;
                }
            }
            
            if(r&&i==3){
                if(x + n<=0){
                     day =29+x+n;
                    month--;
                }
            }
            if(!r&&i==3){
                if(x + n<=0){
                     day = x + n + 28;
                     month--;
                }
            }
            if(n + x <=0){
                if(i == 1 ){
                    year--;
                    day = 31 + (n + x);
                    month = 12;
                }
                if(i == 2 || i == 4 || i == 6 || i == 9 || i == 8 || i == 11){
                    day = 31 + (n + x);
                    month--;
                }
                if(i == 5 || i == 7 || i == 10 || i == 12 ){
                    year--;
                    day = 30 + (n + x);
                    month = 12;
                }
            }
            if(n + x >30){
                if(i == 12){
                    if(n+x > 31){
                        day =(n+x)-31;
                        year++;
                        month=1;
                    }
                    else
                        day = 31;
                }
                if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8  || i == 10){
                    if(n+x > 31){
                        day =(n+x)-31;
                        month++;
                    }
                    else
                        day = 31;
                }
                if(i == 4 || i==6 || i==9 || i==11){
                     day =(n+x)-30;
                     month++;
                }
            }
            System.out.printf("%d days ago is:%d-%d-%d",-n,year,month,day);
        }
        public static void main(String[] args){
            Scanner input = new Scanner(System.in);
            int year = input.nextInt();
            int month = input.nextInt();
            int day = input.nextInt();
            int n = input.nextInt();
            boolean r = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
            if(checkInputValidity(year,month,day,r))
                nextDate(year,month,day,r,-n);
            
            else System.out.println("Wrong Format");
            
    }
}
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Date date = new Date();
        Scanner in = new Scanner(System.in);
        int year = in.nextInt();
        int month = in.nextInt();
        int day = in.nextInt();
        date.setyear(year);
        date.setmonth(month);
        date.setday(day);
        date.nextDate(year,month,day);
    }
}


class Date{
     private int year;
        private int month;
        private int day;
        private int[] arr = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        public int getyear() {
            return year;
        }
        public int getmonth() {
            return month;
        }
        public int getday() {
            return day;
        }
        public void setyear(int year) {
            this.year=year;
        }
        public void setmonth(int month) {
            this.month=month;
        }
        public void setday(int day) {
            this.day=day;
        }
        public static boolean isLeapYear(int year) {
            if(year % 4 == 0 && year % 100 !=0 ||year % 400 == 0)
            return true;
            else
            return false;
        }
        public static boolean checkInputValidity(int year,int month,int day) {
            int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
            if(isLeapYear(year)==true)
                arr[2] = 29;
            if(year>=1900&&year<=2000&&month>0&&month<=12&&day<=arr[month]&&day>0)
                return true;
        else
            return false;
    }
        public static void nextDate(int year,int month,int day) {
            
            int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
            if(isLeapYear(year)==true)
                arr[2] = 29;
            int a = 0,b = 0,c = 0;
            if(checkInputValidity(year,month,day)==true) {
                if(month==12) {
                    if(day==arr[month]) {
                    a = year+1;
                    b = 1;
                    c = 1;}
                if(day>0&&day<arr[month]) 
                        {a = year;
                        b = month;
                        c =day +1;
                        }
                }
                if(month<12) {
                    if(day==arr[month]) {
                        a = year;
                        b = month + 1;
                        c = 1;}
                    if(day>0&&day<arr[month]) 
                            {a = year;
                            b = month;
                            c = day+1;
                            }
                }
                System.out.println("Next day is:"+a+"-"+b+"-"+c);
                }
            else System.out.println("Date Format is Wrong");
        }

        
        
        
        
        
        
        
        
}
import java.util.Scanner;

import java.util.regex.Pattern;

public class Main{
public static void main(String[] args) {
Scanner p = new Scanner(System.in);
        String totalRegex = "([-+]?([1-9]+[0-9]*(\\*)?)?x?(\\^[+-]?[1-9]+[0-9]*)?)+";
        String sbuRegex = "[-+]?([1-9]+[0-9]*(\\*)?)?x?(\\^[+-]?[1-9]+[0-9]*)?";
        String in = p.nextLine();
    boolean bl=Pattern.matches(totalRegex, in);
if(bl==true)
{
    int i;
    int y=p.nextInt();
    int x=p.nextInt();
    int year = p.nextInt();
    int month = p.nextInt();
    int day = p.nextInt();
    System.out.printf(" days ago is:%d-%d-%d",year,month,day);
    String a;
    String arr[]=new String[4];
    a=p.nextLine();
    if(a.length()!=32||a.length()==0)
    {
        System.out.print("Wrong Format");
        return;
    }
        for(i=0;i<a.length();i++)
        {
            char s=a.charAt(i);
            if(s!='0'&&s!='1')
            {
                    System.out.print("Wrong Format");
        return;
            }
        }
}
else
    System.out.println("Wrong Format");
}

}

踩坑心得

作业集1

7-8:最开始不知道如何判断直角三角形,最后用

a*a + b*b - c*c<0.000001||  b*b + c*c -a*a<0.000001|| a*a + c*c- b*b<0.000001
a*a + b*b == c*c||  b*b + c*c == a*a|| a*a + c*c == b*b)&&a!=b&&b!=c&&a!=c

判断是否为等腰或者直角三角形
作业集2
7-4
刚刚开始做的时候不知道如何把闰年作为返回值传送到主函数。后来在网上查到了Boolean值,然后使用
isLeapYear(int year)这个函数来判断是否为闰年在分情况讨论闰年2月,31天的月份,30天的月份等等情况,最后完成该题
7-5
第一次写这个题,原本最开始是没有什么别的想法的,就觉得只要多讨论几个情况就行,最后if else语句用的太多了,就把自己搞糊涂了,后来用
boolean checkInputValidity(int year,int month,int day,boolean r)这个函数,把Boolean放在函数里面,来判断是不是错误数据
下面就讨论六个情况就可以,直接就可以求出下一天是星期几
作业集3
7-2
这个题就可以直接照着那个题里面的图去做,什么时候用getter 什么时候用setter,题目里面都有涉及,再结合作业集2的7-4。
最开始我是这么做的,很想当然,连题目的那个年份限制变化了我都没看见,就导致了我连续提交了好几次都显示部分错误,看来以后还是要读好题
7-3
最开始和大家一样无从下手,但是学习了正则表达式还有参考了老师发的代码就能写出来,然后在网上差一些关于正则表达式的资料,知道了最基本的规则
改进建议
pta的作业的每一题希望可以多弄些样例,就是输出的例子,可以让做题者更好的理解题的意思,能更快的,更精准的做题

这三次作业的知识跨度比较大,如果能在题目上说明本题所用的知识点会更好

另外可以支持多种方法解决问题,不单单局限于一种方法
对齐下括号.
良好的编码格式和命名。
从语法和算法上精简代码,永远永远不要把同一个变量用于多个不同的目的。
使用自描述的变量名和方法名

方法名应该小写字母开头,其后用字母大写的单词连接(veryLongVariableName)

类名应该都使用首字母大写的单词连接而成常量名应该全部大写,

用下划线连接左大括号应该跟 if 语句在同一行



总结
第一单元作业花费时间:花费时间较短 
第二单元作业花费时间:花费时间较长
 最后一部分作业:花费时间较长。

通过这三次作业,我还是收获了很多知识的。
第一次作业:最基本的赋值,声明变量,for循环,while循环,
if语句,数组的声明,使及其创建。
第二次作业:学会了Boolean语句,知道了如何返回ture和false
以及如何把Boolean放在函数里使用;
判断闰年的方法,
第三次作业:学习了解了对象和类,对象,类的创建和声明,getter,setter的方法运用,正则表达式的使用
每次作业花费的时间较长,需要查阅大量的资料才能解决问题,作业的成功率不高,得到的分数不高。解决方法:遇到不懂的知识点上网查阅资料,请教他人,多看书记住一些基本的知识点。
作为Java的思维来说,
当你拿到一个问题时,你分析这个问题不再是第一步先做什么,
第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,
这是第三点。这些都是面向过程思想所不具备的,在解决一些问题的时候,运用面向对象的思想来编写程序解决问题才是最好的解决方式
作业量可以适当增多,多多给我们练习的机会,适当放慢一些课堂进度,给我们足够的时间去看书,去思考,实验课可以改成三周俩节,适当要宽恕留给我们写报告的时间。
对教师的意见:多多培养我们的动手能力,在课堂上,给我们多一些时间去写自己的代码,老师




posted on 2021-04-04 20:58  傲娇小闹钟  阅读(78)  评论(0)    收藏  举报