• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

前三次OOP作业总结

开发技术 开发技术 2周前 (04-04) 7次浏览

目录

一.前言

二.设计与分析

三.踩坑心得

四.改进建议

五.总结

————————————————————————————————————————————————————————————————————————————————–

1.前言

实验一:

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

此题难度中等,主要涉及Java的方法构造,其中最主要的是选择判断语句,考察的知识点是if-else或switch以及细心程度,能否把所有情况罗列出来。

实验二:

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

此题难度中等,主要涉及的知识点是方法的调用和分类的细节处理。

2.输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。

此题和上题有许多类似的地方。难度中等偏上,对分类要求较高。

实验三:

1.定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。

此题难度中等偏上。主要涉及类和对象的创建,语法上还是选择判断为主。

2.使用类与对象编写程序对简单多项式的导函数进行求解。

此题难度较高。涉及正则表达式的灵活运用和细节分类情况。

————————————————————————————————————————————————————————————————————————————————–

2.设计与分析

实验一:

 1 import java.util.Scanner;
 2 
 3  public class Main {
 4     public static void main(String[] args){
 5         Scanner input = new Scanner(System.in);
 6         double a = input.nextDouble();
 7         double b = input.nextDouble();
 8         double c = input.nextDouble();
 9        
10         if(a >200 || b > 200 || c >200 || a < 1 || b < 1 || c < 1)
11             
12             System.out.println("Wrong Format");
13             
14         else{
15             
16             if(a >= b + c || b >= a + c || c >= a + b)
17                System.out.println("Not a triangle");
18                
19             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)
20                System.out.println("Right-angled triangle");
21                 
22            else if(a == b || b == c || a == c)//等腰
23             {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");
24              else if(a == b && b == c)System.out.println("Equilateral triangle");
25              else  System.out.println("Isosceles triangle");
26              }
27             else System.out.println("General triangle");
28             
29             }
30        
31         }
32 }

前三次OOP作业总结

此题要求输入三条边的长度来判断是什么三角形。根据题意我们可以知道我们可以知道一共有非法输入,非三角形,等边三角形,等腰直角三角形,等腰三角形,直角三角形,一般三角形这几种输出情况。这种选择判断类题目我们一般选用if-else或switch语句来完成,这里我采用的是if-else语句。假设a,b,c分别为输入的三条边长。当a >200 || b > 200 || c >200 || a < 1 || b < 1 || c < 1时,判定为非法输入;当a >= b + c || b >= a + c || c >= a + b时,由于三角形第三条边一定会小于另两条边之和,此时判定为非三角形;当(a*a + b*b == c*c||  b*b + c*c == a*a|| a*a + c*c == b*b)&&a!=b&&b!=c&&a!=c时,其中任意两条边不相等,且存在某两条边的平方和等于第三条边的平方,判定为等腰直角三角形。当a == b || b == c || a == c时存在三种情况,如果三条边都相等为等边三角形。如果存在某两条边的平方和等于另一条边的平方则为等腰直角三角形。如果前面两者都不符合则判定为等腰三角形;当前面几种情况都不符合时,判定为一般三角形。

实验二:

1.

 1 import java.util.Scanner;
 2 public class Main{
 3     public static boolean isLeapYear(int year){
 4         if((year%4==0&&year%100!=0)||year%400==0)
 5             return true;
 6          else return false;
 7         
 8     }
 9     public static boolean checkInputValidity(int a,int b,int c){
10         boolean p=true,q;
11              q=isLeapYear(a);
12              
13              if(a>2020||a<1820||b>12||b<1||c<1)
14                  p=false;
15              if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
16              { if(c>31)p=false;}
17              if(b==4||b==6||b==9||b==11)
18              if(c>30)p=false;
19                     if((q==true&&b==2&&c>29)||(q==false&&b==2&&c>28))
20                     p=false;
21         return p;
22     }
23     public static void nextDate(int a,int b,int c){
24         if(b==12&&c==31)System.out.println("Next date is:"+(a+1)+"-1-1");
25         else if(b==1&&c==31)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
26         
27         else if(b==2&&c>=28)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
28         else if(b==3&&c==31)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
29         else if(b==4&&c==30)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
30         else if(b==5&&c==31)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
31         else if(b==6&&c==30)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
32         else if(b==7&&c==31)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
33        else  if(b==8&&c==31)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
34         else if(b==9&&c==30)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
35       else   if(b==10&&c==31)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
36        else  if(b==11&&c==30)System.out.println("Next date is:"+a+"-"+(b+1)+"-1");
37         else System.out.println("Next date is:"+a+"-"+b+"-"+(c+1));
38     }
39     public static void main(String[] args){
40          Scanner input=new Scanner(System.in);
41              int a=input.nextInt();
42              int b=input.nextInt();
43              int c=input.nextInt();
44         if(checkInputValidity(a,b,c)==false)
45             System.out.println("Wrong Format");
46         else nextDate(a,b,c);
47     }
48     
49 }

前三次OOP作业总结

此题要求为输入一天的日期来输出下一天的日期。主要可以用到这几个方法:

1 public static void main(String[] args);//主方法 
2 public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型 
3 public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值
4 public static void nextDate(int year,int month,int day) ; //求输入日期的下一天

根据(year%4==0&&year%100!=0)||year%400==0)判断该年是否为闰年。如果年份不大于大于2020或不小于1820,月份为1,3,5,7,8,10,12时不超过31天,月份为4,6,9,11时不超过30天,平年二月不超过28天,闰年二月不超过29天,如果输入的日期都满足这些方可输出下一天的日期,否则输出输入有误。最后此题最关键的一个步骤就是下一天的计算问题。如果日期为12月31日,下一天就是新年的第一天,如果达到了该月的最后一天,下一天也就变成了下一个月的第一天(其中每个月都有各自对应的天数,尤其是二月,要判断是否为闰年)。

第二题:

 1 import java.util.Scanner;
 2 public class Main{
 3     public static boolean isLeapYear(int year){
 4         if((year%4==0&&year%100!=0)||year%400==0)
 5             return true;
 6          else return false;
 7         
 8     }
 9     public static boolean checkInputValidity(int a,int b,int c,int n){
10         boolean p=true,q;
11              q=isLeapYear(a);
12              
13              if(a>2020||a<1820||b>12||b<1||c<1)
14                  p=false;
15              if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
16              { if(c>31)p=false;}
17              if(b==4||b==6||b==9||b==11)
18              if(c>30)p=false;
19                     if((q==true&&b==2&&c>29)||(q==false&&b==2&&c>28))
20                     p=false;
21         if(Math.abs(n)>10)p=false;
22         return p;
23     }
24     
25      public static void main(String[] args){
26          Scanner input=new Scanner(System.in);
27              int a=input.nextInt();
28              int b=input.nextInt();
29              int c=input.nextInt();
30              int d=input.nextInt();
31          if(checkInputValidity(a,b,c,d)==false)
32              System.out.println("Wrong Format");
33          else{
34              int n;
35              n=c-d;
36              if(b==1)
37              {
38                  if(n>31)System.out.println(d+" days ago is:"+a+"-"+(b+1)+"-"+(n-31));
39                  else if (n<0)System.out.println(d+" days ago is:"+(a-1)+"-12"+"-"+(31+n));
40                  else System.out.println(d+" days ago is:"+a+"-"+b+"-"+n);
41              }
42             if(b==2){
43    if(isLeapYear(a)==true){
44        if(n>29)System.out.println(d+" days ago is:"+a+"-"+(b+1)+"-"+(n-29));
45         else if (n<0)System.out.println(d+" days ago is:"+a+"-1"+"-"+(31+n));
46          else System.out.println(d+" days ago is:"+a+"-"+b+"-"+n);
47    }
48                                         else {if(n>28)System.out.println(d+" days ago is:"+a+"-"+(b+1)+"-"+(n-28));
49         else if (n<0)System.out.println(d+" days ago is:"+a+"-1"+"-"+(31+n));
50          else System.out.println(d+" days ago is:"+a+"-"+b+"-"+n);}
51                     }
52    
53              
54                
55               if(b==3)
56              {
57                  if(n>31)System.out.println(d+" days ago is:"+a+"-"+(b+1)+"-"+(n-31));
58                  else if(n<0){if(isLeapYear(a)==true)System.out.println(d+" days ago is:"+a+"-2"+"-"+(29+n));
59                                                                         else System.out.println(d+" days ago is:"+a+"-2"+"-"+(28+n));}
60                                               else System.out.println(d+" days ago is:"+a+"-"+b+"-"+n);
61              }
62                if(b==4||b==6||b==9||b==11)
63              {
64                  if(n>30)System.out.println(d+" days ago is:"+a+"-"+(b+1)+"-"+(n-30));
65                  else if(n<0)System.out.println(d+" days ago is:"+a+"-"+(b-1)+"-"+(31+n));
66                                               else System.out.println(d+" days ago is:"+a+"-"+b+"-"+n);
67              }
68               if(b==5||b==7||b==10)
69              {
70                  if(n>31)System.out.println(d+" days ago is:"+a+"-"+(b+1)+"-"+(n-31));
71                  else if(n<0)System.out.println(d+" days ago is:"+a+"-"+(b-1)+"-"+(30+n));
72                                               else System.out.println(d+" days ago is:"+a+"-"+b+"-"+n);
73              }
74                 if(b==8)
75              {
76                  if(n>30)System.out.println(d+" days ago is:"+a+"-"+(b+1)+"-"+(n-31));
77                  else if(n<0)System.out.println(d+" days ago is:"+a+"-7"+"-"+(31+n));
78                                               else System.out.println(d+" days ago is:"+a+"-"+b+"-"+n);
79              }
80  if(b==12)
81              {
82                  if(n>31)System.out.println(d+" days ago is:"+(a+1)+"-1"+"-"+(n-31));
83                  else if(n<0)System.out.println(d+" days ago is:"+a+"-11"+"-"+(30+n));
84                                               else System.out.println(d+" days ago is:"+a+'-'+b+"-"+n);
85              }
86                    
87          }
88      }
89 }

前三次OOP作业总结

此题也要判断输入是否合法。根据(year%4==0&&year%100!=0)||year%400==0)判断该年是否为闰年。如果年份不大于大于2020或不小于1820,月份为1,3,5,7,8,10,12时不超过31天,月份为4,6,9,11时不超过30天,平年二月不超过28天,闰年二月不超过29天,如果输入的日期都满足这些方可输出前n天的日期,否则输出输入有误。日期为day-n日。如果结果为非整数说明日期在前一个月,然而每个月的天数并不相同,尤其是二月还要判断是否为闰年。

实验三:

第一题:

 1 import java.util.Scanner;
 2 class Date{
 3     private int year;
 4     private int month;
 5     private int day;
 6     int []mon_maxnum=new int []{0,31,28,31,30,31,30,31,31,30,31,30,31};
 7     Date(int year,int month,int day){this.year=year;this.month=month;this.day=day;}
 8     int getyear(){return year;}
 9     int getmonth(){return month;}
10         int getday(){return day;}
11         void setyear(int year){this.year=year;}
12         void setmonth(int month){this.month=month;}
13         void steday(int year){this.day=day;}
14     boolean isleapyear(){if((year%4==0&&year%100!=0)||year%400==0)return true;
15                          else return false;
16         
17     }
18     boolean checkinputvalidity(){
19          boolean p=true,q;
20              q=isleapyear();
21              
22              if(year>2000||year<1900||month>12||month<1||day<1)
23                  p=false;
24              if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
25              { if(day>31)p=false;}
26              if(month==4||month==6||month==9||month==11)
27              if(day>30)p=false;
28                     if((q==true&&month==2&&day>29)||(q==false&&month==2&&day>28))
29                     p=false;
30         return p;
31     }
32     void nextdate(){
33         if(month==12&&day==31)System.out.println("Next day is:"+(year+1)+"-1-1");
34         else if(month==1&&day==31)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
35         else if(month==2&&day==29&&isleapyear()==true)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
36 
37         else if(month==2&&day==28&&isleapyear()==false)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");        
38         else if(month==3&&day==31)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
39         else if(month==4&&day==30)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
40         else if(month==5&&day==31)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
41         else if(month==6&&day==30)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
42         else if(month==7&&day==31)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
43        else  if(month==8&&day==31)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
44         else if(month==9&&day==30)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
45       else   if(month==10&&day==31)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
46        else  if(month==11&&day==30)System.out.println("Next day is:"+year+"-"+(month+1)+"-1");
47         else System.out.println("Next day is:"+year+"-"+month+"-"+(day+1));
48         
49 }
50 }
51 public class Main{
52     public static void main(String []args){
53         Scanner input=new Scanner(System.in);
54         Date d=new Date(input.nextInt(),input.nextInt(),input.nextInt());
55         if(d.checkinputvalidity()==false)
56             System.out.println("Date Format is Wrong");
57         else d.nextdate();
58     }
59 }

前三次OOP作业总结

这是第一次设计到类的设计。类包括属性和方法。根据题目意思,可设计两个类Date和Main,并由Main来控制Date类。Date类中的属性要求是private,只能通过方法改动。构造方法有三个参数,是输入的年,月,日。getyear()用来返回年,setyear()用来初始化年。getmonth()用来返回月,setmonth()用来初始化月。getday()用来返回日,setday()用来初始化日。checkinputvalidity()用来检测输入日期是否有效。isleapyear()用来判断是否是闰年。最后getnextdate()用来输出。

前三次OOP作业总结

 

 第二题:

 1 import java.util.regex.Matcher;
 2 import java.util.regex.Pattern;
 3 import java.util.Scanner;
 4  public class Main{
 5      
 6          
 7     
 8         void panduan(String str){
 9             
10             if(str.matches("[-+]?[1-9]?[\d]*")) 
11             System.out.println("0");
12          else System.out.println("Wrong Format");
13         
14         }
15     
16      public static void main(String[] arg){
17          Scanner input = new Scanner(System.in);
18          String str=input.nextLine();
19          Main d=new Main();
20          d.panduan(str);
21      }   
22     
23 }

对幂函数多项式求导。对输入的字符串用正则表达式来进行判断。并且注意以下几点细节:当某一项为“0”时,则该项不需要显示,但如果整个导函数结果为“0”时,则 显示为“0”,当输出结果第一项系数符号为“+”时,不输出“+”,当指数符号为“+”时,不输出“+”,当指数值为“0”时,则不需要输出“x^0”,只需要输出其系数即可。 输出格式见输入输出示例。

—————————————————————————————————————

实验一:

 

 

前三次OOP作业总结

 

在判断是否为直角三角形中,如果用a*a+b*b==c*c则会有测试样例不能通过,经过查阅资料,改成两数之差小于一个很小的数比如0.0000001.

实验二:

第一题:

前三次OOP作业总结

一开始我没有正确分类,比如二月没有分闰年和平年,每月的天数都不全一样,还可能出现跨年的情况,仔细分析后我把每种特殊情况都列举出来了就解决了。

第二题:

前三次OOP作业总结

首先要注意n为负数状况。最重要的是八月的前一个月是七月,也有31天,12月的前一个月1月也是31天,还有三月的前一个月二月,也要分闰年还是平年。这些如果跨月都要考虑,耗费了许多精力。

实验三:

前三次OOP作业总结

当时第一次写类还不太熟悉,对构造方法还不太熟悉,对类的属性和类的方法还不太熟悉,翻看书籍后知道了类的创建和实例化。

————————————————————————————————————————————————————————————————————————————————–

4.改进建议

1.代码可读性还不够高,下括号没有标齐;

2.函数取名和变量取名比较随意一般都是用单个字母表示,没有实际意义;

3.有些月份分类其实可以合并成一种情况,可以提高执行效率和精简代码;

4.求导那题的正则表达式用得还不够灵活;

————————————————————————————————————————————————————————————————————————————————–

5.总结

1.两个数相等时用差值小于一个小数更好;

2.情况多时要仔细分类,不能漏;

3.对类的了解更丰富了;

4.类属性设置为private,用方法来初始化属性,可以让程序更安全;

5.了解了一些正则表达式的运用;

6.老师上课时普通话可以标准一点;

7.相关知识点和题目发到群里,前边投影很难看见;

 


程序员灯塔
转载请注明原文链接:前三次OOP作业总结
喜欢 (0)