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

Blog作业02

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

(1)前言:

三次题目集主要是以聚合、封装、继承、多态、接口以及正则表达式知识点来布置题目的,大部分的题目难度还是比较适中的,适合我们来做练习巩固我们所学的知识,题量的数目也还是中规中矩,不算多也不算少的。

(2)设计与分析:

1.题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较

题目如下:

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

Blog作业02

 

 

 

 

Blog作业02

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

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

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

输入格式:

有三种输入方式(以输入的第一个数字划分[1,3]):

  • 1 year month day n //测试输入日期的下n天
  • 2 year month day n //测试输入日期的前n天
  • 3 year1 month1 day1 year2 month2 day2 //测试两个日期之间相差的天数

输出格式:

  • 当输入有误时,输出格式如下: Wrong Format
  • 当第一个数字为1且输入均有效,输出格式如下:
    year-month-day
     
  • 当第一个数字为2且输入均有效,输出格式如下:
    year-month-day
     
  • 当第一个数字为3且输入均有效,输出格式如下:
    天数值
     

输入样例1:

在这里给出一组输入。例如:

3 2014 2 14 2020 6 14
 

输出样例1:

在这里给出相应的输出。例如:

2312
 

输入样例2:

在这里给出一组输入。例如:

2 1935 2 17 125340
 

输出样例2:

在这里给出相应的输出。例如:

1591-12-17
 

输入样例3:

在这里给出一组输入。例如:

1 1999 3 28 6543
 

输出样例3:

在这里给出相应的输出。例如:

2017-2-24
 

输入样例4:

在这里给出一组输入。例如:

0 2000 5 12 30
 

输出样例4:

在这里给出相应的输出。例如:Wrong Format

设计与分析:
首先看题目集四(7-2)设计图,它的原理是先把year类写好,然后再写month类,在month类中运用year类,
这样可以在month类中调用year类,在写day类,在day类中运用month类,然后再写date
类,在date类中运用day类,在主函数只要用到date类就可以运用所有的类了。
题目集五(7-4)设计图,它的原理是是把year类month类day类写好,在date类调用year类month类以及day类,在主函数调用date类。

题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较:
题目集四(7-2)类与类之间的联系太过于紧密了,题目集五(7-4)类与类之间的联系不是很强。
题目集四(7-2)如果有个类出错比较难发现错误,找出bug要花费挺多时间的
而题目集五(7-4)如果出错我们可以很快找到哪里出现错误了
所以题目集四(7-2)设计的不够合理,题目集五(7-4)的设计还是比比较完善的。

细节分析:
在year类中要注意的细节:题目给出的年份的范围要合理,不合理要输出错误的提示,以及判断年份是否是闰年,
如果不考虑是否为闰年的话,那二月只有二十八天,那求上n天 下n天就会出错
yeard类的代码如下:
class Year{
    int year;
     Year()
    {
        
    }
     Year(int nian)
    {
        this.year = nian;
    }
     int Getyear()
    {
        return this.year;
    }
     boolean Leapyear()
    {
        int a = this.year;
        if((a%400==0)||(a%100!=0&&a%4==0))
            return true;
        else
            return false;
    }
     boolean Date()
    {
        if(this.year>=1820&&this.year<=2020)
            return true;
        else
            return false;
    }
     void Yearjian()
    {
        this.year = this.year-1;
    }
     void Yearjia()
    {
        this.year = this.year+1;
    }
}

在month类要注意的细节:月份的范围是1到12月,还有就是月份加一减一要考虑到是否要改变年份。

month类的代码如下:

class Month
{
    int month;
    Year s1 = new Year();
    
     Month()
    {
        
    }
     Month(int month,int year)
    {
        this.month = month;
        s1.year = year;
    }
     int Getmonth()
    {
        return this.month;
    }
     Year Getyear()
    {
        return s1;
    }
     void resemin()
    {
        this.month = 1;
    }
     void resemax()
    {
        this.month = 12;
    }
     boolean heli()
    {
        int a = this.month;
        if((a>0&&a<=12)&&(s1.Date()==true))
            return true;
        else
            return false;
    }
     boolean heli1()
        {
            int a = this.month;
            if((a>0&&a<=12))
                return true;
            else
                return false;
        }
     void jia()
    {
        this.month++;
    }
    void jian()
    {
        this.month--;
    }
}

day类要注意的事项:首先要定义一个数组,数组的含义是每个月的天数,坐标为0的数组也为0,这样才能与月份匹配。在判断每月的天数,1 3 5 7 8 10 12月都是31天,4 6 8 11月都是30天,最好注意的是2月,要先判断是否为闰年,如果是那二月就是29天,否则是28天。

day类的代码如下:

class Day
{
    int day;
    Month s2 = new Month();
    int a[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
     Day()
    {
        
    }
     Day(int day,int month)
    {
        this.day = day;
        s2.month = month;
    }
     int Getday()
    {
        return this.day;
    }
     Month Getmonth()
    {
        return s2;
    }
     void daymin()
    {
        this.day = 1;
    }
     void daymax()
    {
        int b = s2.month;
        if(b==2&&s2.s1.Leapyear()==true)
            this.day = a[b]+1;
        else
            this.day = a[b];
            
    }
     boolean heli()
    {
        int b = s2.month;
        if((b==1||b==3||b==5||b==7||b==8||b==10||b==12)&&(s2.heli()==true))
        {
            if(this.day>0&&this.day<=31)
                return true;
            else
                return false;
        }
        else if((b==4||b==6||b==9||b==11)&&(s2.heli()==true))
        {
            if(this.day>0&&this.day<=30)
                return true;
            else
                return false;
        }
        else if((b==2)&&(s2.heli()==true))
        {
            if(s2.s1.Leapyear()==true)
            {
                if(this.day>0&&this.day<=29)
                    return true;
                else
                    return false;
            }
            else
            {
                if(this.day>0&&this.day<=28)
                    return true;
                else
                    return false;
            }
        }
        else 
            return false;
    }
     boolean heli1()
        {
            int b = s2.month;
            if((b==1||b==3||b==5||b==7||b==8||b==10||b==12)&&(s2.heli1()==true))
            {
                if(this.day>0&&this.day<=31)
                    return true;
                else
                    return false;
            }
            else if((b==4||b==6||b==9||b==11)&&(s2.heli1()==true))
            {
                if(this.day>0&&this.day<=30)
                    return true;
                else
                    return false;
            }
            else if((b==2)&&(s2.heli1()==true))
            {
                if(s2.s1.Leapyear()==true)
                {
                    if(this.day>0&&this.day<=29)
                        return true;
                    else
                        return false;
                }
                else
                {
                    if(this.day>0&&this.day<=28)
                        return true;
                    else
                        return false;
                }
            }
            else 
                return false;
        }

     void jia()
    {
        this.day++;
    }
     void jian()
    {
        this.day--;
    }

}

然后就是date类的注意事项:首先要求下n天的代码,如果下n天它要跨月跨年,天数不合理月份加一,月份不合理年份加一。

求下n天的代码如下:

AAA nextday(int n)
    {     
        for(int i = 0;i<n;i++)
        {
            s3.jia();
            if(s3.heli()==false)
            {
                s3.s2.jia();                
                if(s3.s2.heli()==false)
                {
                    s3.s2.s1.Yearjia();
                    s3.s2.resemin();
                    s3.daymin();
                }
                s3.daymin();
            }
        }
        return this;
    }

求上n天的注意事项跟求下n天的注意事项一样。

求上n天的代码如下:

AAA shangday(int n)
    {     
        for(int i=0;i<n;i++)
        {
            s3.jian();
            if(s3.heli()==false)
            {
                s3.s2.jian();                
                if(s3.s2.heli()==false)
                {
                    s3.s2.s1.Yearjian();
                    s3.s2.resemax();
                    s3.daymax();
                }
                s3.daymax();
            }
        }
        return this;
    }

最后就是要求两个日期相差多少天的分析:先把两个日期比较那个日期早,日期早的天数一直加一,直到两个日期相等,有n个一就是他们相差n天。

两个日期比较大小的代码如下:

boolean daxiao(int d1,int m1,int y1,int d2,int m2,int y2)
    {
        if(y1>y2)
        return true;
        else if(y1==y2)
        {
            if(m1>m2)
            return true;
            else if(m1==m2)
            {
                if(m1>m2)
                    return true;
                else
                    return false;
            }
            else
                return false;        
        }
        else
            return false;
    }
     boolean deng(int d1,int m1,int y1,int d2,int m2,int y2)
    {
        if((d1==d2)&&(m1==m2)&&(y1==y2))
            return true;
        else
            return false;
    }

相差多少天的代码如下:

    int tian(int d1,int m1,int y1,int d2,int m2,int y2)
    {
        int s=0;
        AAA s5=new AAA();
        AAA s6=new AAA();
        s5.set(d1,m1,y1);
        s6.set(d2,m2,y2);
        if(deng( d1, m1,y1, d2, m2,y2)==true)
        return 0;
        else if(daxiao(d1, m1,y1, d2, m2,y2)==true)
        {
            
            for (int i=0;i>=0;i++)
            {
                s6.nextday(1);
                s++;
                if(deng(s5.s3.day,s5.s3.s2.month,s5.s3.s2.s1.year, s6.s3.day, s6.s3.s2.month,s6.s3.s2.s1.year)==true)
                {
                    break;
                }
            }
            return s;
        }
        else 
        {
            
            for (int i=0;i>=0;i++)
            {
                s5.nextday(1);
                s++;
                if(deng(s5.s3.day,s5.s3.s2.month,s5.s3.s2.s1.year, s6.s3.day, s6.s3.s2.month,s6.s3.s2.s1.year)==true)
                {
                    break;
                }
            }
            return s;
        }
    }
}

题目集五(7-4)的方法类似。

 

 

2.题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等)

题目集四(7-3)题目如下:

编写程序,实现图形类的继承,并定义相应类对象并进行测试。

  1. 类Shape,无属性,有一个返回0.0的求图形面积的公有方法public double getArea();//求图形面积
  2. 类Circle,继承自Shape,有一个私有实型的属性radius(半径),重写父类继承来的求面积方法,求圆的面积
  3. 类Rectangle,继承自Shape,有两个私有实型属性width和length,重写父类继承来的求面积方法,求矩形的面积
  4. 类Ball,继承自Circle,其属性从父类继承,重写父类求面积方法,求球表面积,此外,定义一求球体积的方法public double getVolume();//求球体积
  5. 类Box,继承自Rectangle,除从父类继承的属性外,再定义一个属性height,重写父类继承来的求面积方法,求立方体表面积,此外,定义一求立方体体积的方法public double getVolume();//求立方体体积
  6. 注意:
  • 每个类均有构造方法,且构造方法内必须输出如下内容:Constructing 类名
  • 每个类属性均为私有,且必须有getter和setter方法(可用Eclipse自动生成)
  • 输出的数值均保留两位小数

主方法内,主要实现四个功能(1-4): 从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积; 从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积; 从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积; 从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;

假如数据输入非法(包括圆、矩形、球及立方体对象的属性不大于0和输入选择值非1-4),系统输出Wrong Format

输入格式:

共四种合法输入

  • 1 圆半径
  • 2 矩形宽、长
  • 3 球半径
  • 4 立方体宽、长、高

输出格式:

按照以上需求提示依次输出

输入样例1:

在这里给出一组输入。例如:

1 1.0
 

输出样例1:

在这里给出相应的输出。例如:

Constructing Shape
Constructing Circle
Circle's area:3.14
 

输入样例2:

在这里给出一组输入。例如:

4 3.6 2.1 0.01211
 

输出样例2:

在这里给出相应的输出。例如:

Constructing Shape
Constructing Rectangle
Constructing Box
Box's surface area:15.26
Box's volume:0.09
 

输入样例3:

在这里给出一组输入。例如:

2 -2.3 5.110
 

输出样例2:

在这里给出相应的输出。例如:

Wrong Format

 

 

这个题目的设计与分析:

首先要写shape类为父类,然后矩形和圆形继承shape类,球继承圆类,长方体继承矩形类,这就是继承的方法。

重写父类要注意 子类与父类名字要相同,返回类型也是相同的这样才能重写父类。

还有求面积的Π要写成Math.PI来表示。

 

 

类Shape,无属性,有一个返回0.0的求图形面积的公有方法public double getArea();//求图形面积

的代码如下:

 

class Shape
{
    public Shape()
    {
        System.out.println("Constructing Shape");
    }
    public double getArea()
    {
        return 0.0;
    }
}

这个就是父类shape类,无属性,有一个返回0.0的求面积的方法,在子类中重写shape类中的求面积的方法。

 

剩下子类的代码如下:

class Circle extends Shape//⚪圆
{
    double radius;//半径
    public Circle()
    {System.out.println("Constructing Circle");}
    public void Circle1(double sa)
    {
        this.radius = sa;
        
    }
    public double getArea()
    {
        double s;
        s = Math.PI*radius*radius;
        return s;
    }
}

class Ball extends Circle//
{
    public Ball()
    {System.out.println("Constructing Ball");}
    public void Ball1(double r)
    {
        super.radius=r;
        
    }
    public double getArea()
    {
        double a,c;
        a= super.radius;
        c= Math.PI*a*a*a*4.0/3.0;
        return c;
    }
    public double getVolume()
    {
        double a,c;
        a= super.radius;
        c=4.0*Math.PI*a*a;
        return c;
    }
}
class Rectangle extends Shape//矩形
{
    double width;//
    double length;//
    public Rectangle()
    {System.out.println("Constructing Rectangle");}
    public void Rectangle1(double chang,double kuan)
    {
        this.width = kuan;
        this.length = chang;
        
    }
    public double getArea()
    {
        double s;
        s = width*length;
        return s;
    }
}

class Box extends Rectangle//立体
{
    double height;//
    public Box()
    {System.out.println("Constructing Box");}
    public void Box1(double chang,double kuan,double gao)
    {
        super.width = kuan;
        super.length = chang;
        this.height = gao;
        
    }
    public double getArea()
    {
        double a,b,c,d;
        a= super.length;
        b= super.width;
        c= this.height;
        d=a*b*c;
        return d;
    }
    public double getVolume()
    {
        double a,b,c,d;
        a= super.length;
        b= super.width;
        c= this.height;
        d=(a*b*2)+(a*c*2)+(b*c*2);
        return d;
    }
}

这个题目的注意事项:

要用父类的属性要用super.来表示

 

 

题目集六(7-5) 图形继承与多态,题目如下:

输入格式:

从键盘首先输入三个整型值(例如a b c),分别代表想要创建的Circle、Rectangle及Triangle对象的数量,然后根据图形数量继续输入各对象的属性值(均为实型数),数与数之间可以用一个或多个空格或回车分隔。

输出格式:

  1. 如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边关系),则输出Wrong Format
  2. 如果输入合法,则正常输出,输出内容如下(输出格式见输入输出示例):
  • 各个图形的面积;
  • 所有图形的面积总和;
  • 排序后的各个图形面积;
  • 再次所有图形的面积总和。

输入样例1:

在这里给出一组输入。例如:

1 1 1 2.3 3.2 3.2 6.5 3.2 4.2
 

输出样例1:

在这里给出相应的输出。例如:

Original area:
16.62 10.24 5.68 
Sum of area:32.54
Sorted area:
5.68 10.24 16.62 
Sum of area:32.54
 

输入样例2:

在这里给出一组输入。例如:

0 2 2 2.3 2.5 56.4 86.5 64.3 85.6 74.6544 3.2 6.1 4.5
 

输出样例2:

在这里给出相应的输出。例如:

Original area:
5.75 4878.60 2325.19 7.00 
Sum of area:7216.54
Sorted area:
5.75 7.00 2325.19 4878.60 
Sum of area:7216.54
 

输入样例3:

在这里给出一组输入。例如:

0 0 1 3 3 6
 

输出样例3:

在这里给出相应的输出。例如:Wrong Format

 

设计与分析:

学习 Java 语言的过程中,对于多态的理解是非常关键的,理解了多态也就意味着打开了理解 Java 各种“抽象”的大门。 所谓的“多态”,简单的理解就是对象在不同情况下的不同表现,具体体现在定义和功能两个方 面,简单的总结一下,多态可以用“三个定义和两个方法”来总结。三个定义分别是父类定义子类构 建、接口定义实现类构建和抽象类定义实体类构建,而两个方法分别是方法重载和方法重写。本次作 业我们采用的是抽象类定义、实体类构建的方式。即 Shape 为抽象类,Circle、Rectangle 及 Triangle 为实体类。

要求创建的各个图形对象均存储在 ArrayList类型的列表中,可能会用到的方法如下(仅 作提示): add()、addAll()、toArray(),此外,还可能用到 Arrays 类或者 Collections 类。

 ArrayList类型可以存下类的数据

创建ArrayList的代码是这样子的:

private ArrayList<Circle8> list1= new ArrayList<Circle8>();
private ArrayList<Rectangle8> list2= new ArrayList<Rectangle8>();
private ArrayList<Triangle8> list3= new ArrayList<Triangle8>();

Circle8  Rectangle8  Triangle8都是类

把Circle8类中的数据存在list1中,Rectangle8类中的数据存在list2中,Triangle8类中的数据存在list3中

储存数据的代码如下:

 

        void add(Circle8 a){
        list1.add(a);
    }
    void add(Rectangle8 a){
        list2.add(a);
    }
    void add(Triangle8 a){
        list3.add(a);
    }    

 

用.add(类)就能储存整个类了。

如果要调用这个类时需要的代码如下:

                void show() {
        for(Circle8 a:list1)
            a.show();
        for(Rectangle8 a:list2)
            a.show();
        for(Triangle8 a:list3)
            a.show();
                }

这题全部的代码如下:

import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    private ArrayList<Circle8> list1= new ArrayList<Circle8>();
    private ArrayList<Rectangle8> list2= new ArrayList<Rectangle8>();
    private ArrayList<Triangle8> list3= new ArrayList<Triangle8>();
    void add(Circle8 a){
        list1.add(a);
    }
    void add(Rectangle8 a){
        list2.add(a);
    }
    void add(Triangle8 a){
        list3.add(a);
    }
    void show() {
        for(Circle8 a:list1)
            a.show();
        for(Rectangle8 a:list2)
            a.show();
        for(Triangle8 a:list3)
            a.show();
    }
    double sum()
    {
        double s=0;
        for(Circle8 a:list1)
            s=s+a.getArea();            
        for(Rectangle8 a:list2)
            s=s+a.getArea();
        for(Triangle8 a:list3)
            s=s+a.getArea();
        return s;
    }
    void pai()
    {
        int s = list1.size()+list2.size()+list3.size();
        int d=list1.size();
        int b=list2.size();
        int c=list3.size();
        double p = 0;
        double a[] = new double[s]; 
        System.out.println("Sorted area:");
        for(int i=0;i<s;i++)
        {
            if(i<d)
                a[i] = list1.get(i).getArea();
            else if(i>=d&&i<(d+b))
                a[i] = list2.get(i-d).getArea();
            else
                a[i] = list3.get(i-d-b).getArea();
        }
        for(int i =0;i<s-1;i++)
        {
            for(int k = 0;k<s-i-1;k++)
            {
                if(a[k]>a[k+1])
                {
                    p = a[k];
                    a[k] = a[k+1];
                    a[k+1] = p;
                }
            }
        }
        for(int i =0;i<s;i++)
            System.out.printf("%.2f ",a[i]);
        System.out.printf("n");
        
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Main sb = new Main();        
        Scanner in = new Scanner(System.in);
        int a,b,c;
        int sa = 0;
        double r,chang,kuan,s1,s2,s3;
        a = in.nextInt();
        b = in.nextInt();
        c = in.nextInt();
        for(int i = 0;i<a;i++ )
        {
            r = in.nextDouble();
            sb.add(new Circle8(r));
            if(r<=0)
                sa=1;
        }
        for(int i = 0;i<b;i++ )
        {
            chang = in.nextDouble();
            kuan = in.nextDouble();
            sb.add(new Rectangle8(chang,kuan));
            if(chang<0||kuan<0)
                sa=1;
        }
        for(int i = 0;i<c;i++ )
        {
            s1 = in.nextDouble();
            s2 = in.nextDouble();
            s3 = in.nextDouble();
            sb.add(new Triangle8(s1,s2,s3));
            if((s1<0||s2<0||s3<0)||(s1+s2<=s3)||(s2+s3<=s1)||(s1+s3<=s2))
                sa=1;
        }
        if(sa==1||a<0||b<0||c<0)
            System.out.println("Wrong Format");
        else
        {
            System.out.println("Original area:");
            sb.show();
            System.out.printf("nSum of area:%.2fn",sb.sum());
            sb.pai();
            System.out.printf("Sum of area:%.2fn",sb.sum());
            
        }
        
        
    }

}
class Circle8{
    double radius;//半径
    Circle8()
    {}
    Circle8(double r){
        this.radius = r;
    }
    double getArea()
    {
        double s;
        s = Math.PI*radius*radius;
        return s;
    }
    void show(){
        System.out.printf("%.2f ",getArea());
    }
    
}
class Rectangle8{
    double width;//
    double length;//
    Rectangle8()
    {}
    Rectangle8(double a,double b)
    {
        this.width = b;
        this.length = a;
        
    }
    double getArea()
    {
        double s;
        s = width*length;
        return s;
    }
    void show(){
        System.out.printf("%.2f ",getArea());
    }
    
}
class Triangle8{
    double a;
    double b;
    double c;    
    Triangle8()
    {
        
    }
    Triangle8(double a,double b,double c){
        this.a=a;
        this.b=b;
        this.c=c;
    }
    double getArea()
    {
        double s = (a+b+c)/2.0;
        double s1;
        s1 = (Math.sqrt(s*(s-a)*(s-b)*(s-c)));
        return s1;
    }
    void show(){
        System.out.printf("%.2f ",getArea());
    }
    
}

 

 

题目集六(7-6)实现图形接口及多态性  题目如下:

编写程序,使用接口及类实现多态性,类图结构如下所示:

Blog作业02

其中:

  • GetArea为一个接口,无属性,只有一个GetArea(求面积)的抽象方法;
  • Circle及Rectangle分别为圆类及矩形类,分别实现GetArea接口
  • 要求:在Main类的主方法中分别定义一个圆类对象及矩形类对象(其属性值由键盘输入),使用接口的引用分别调用圆类对象及矩形类对象的求面积的方法,直接输出两个图形的面积值。(要求只保留两位小数)

输入格式:

从键盘分别输入圆的半径值及矩形的宽、长的值,用空格分开。

输出格式:

  • 如果输入的圆的半径值及矩形的宽、长的值非法(≤0),则输出Wrong Format
  • 如果输入合法,则分别输出圆的面积和矩形的面积值(各占一行),保留两位小数。

输入样例1:

在这里给出一组输入。例如:

2 3.6 2.45
 

输出样例1:

在这里给出相应的输出。例如:

12.57
8.82
 

输入样例2:

在这里给出一组输入。例如:

9 0.5 -7.03
 

输出样例2:

在这里给出相应的输出。例如:Wrong Format

 

设计与分析:

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

这题最重要的元素就是:

GetArea为一个接口,无属性,只有一个GetArea(求面积)的抽象方法。

代码如下:

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in =new Scanner(System.in);
        double s1,s2,s3;
        s1 = in.nextDouble();
        s2 = in.nextDouble();
        s3 = in.nextDouble();
        Circle7 sa = new Circle7(s1);
        Rectangle7 sb = new Rectangle7(s2,s3);
        if(s1<=0||s2<=0||s3<=0)
            System.out.println("Wrong Format");
        else
        {
            sa.show();
            sb.show();
        }
    }

}
interface GetArea{
    double getArea7();
}
class Rectangle7 implements GetArea{
    double width;//
    double length;//
    Rectangle7()
    {}
    Rectangle7(double a,double b)
    {
        this.width = b;
        this.length = a;
        
    }
    public double getArea7()
    {
        double s;
        s = width*length;
        return s;
    }
    void show(){
        System.out.printf("%.2fn",getArea7());
    }
    
}
class Circle7 implements GetArea{
    double radius;//半径
    Circle7()
    {}
    Circle7(double r){
        this.radius = r;
    }
    public double getArea7()
    {
        double s;
        s = Math.PI*radius*radius;
        return s;
    }
    void show(){
        System.out.printf("%.2fn",getArea7());
    }
}

 

(3)采坑心得:(对源码的提交过程中出现的问题及心得进行总结,务必做到详实)

源码的提交过程中出现的问题有:

在题目集4(7-2)、题目集5(7-4)求上下n天的时候发现运行的结果的日期与测试日期相差几天,然后再检查代码的时候我发现是我忘了考虑是否为闰年,所以里测试日期会相差几天。

在题目集4(7-3)、题目集6(7-5、7-6)中求圆的面积要用到Π,刚开始我用3.14发现不行 然后我才知道要用Math.PI才能表示,

还有就是我不知道怎么求三角形的面积,然后我百度的一下才知道如何求三角形的面积。

 

(5)总结:

对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见:没有什么建议和意见。

这三次题目集让我学到了 聚合设计 封装、继承、多态、接口等知识点。

 

但是正则表达式需要进一步学习及研究。

 

 


程序员灯塔
转载请注明原文链接:Blog作业02
喜欢 (0)