抽象类与接口

6-1 创建一个直角三角形类实现IShape接口

创建一个直角三角形类(regular triangle)RTriangle类,实现下列接口IShape。两条直角边长作为RTriangle类的私有成员,类中包含参数为直角边的构造方法。

interface IShape {// 接口

public abstract double getArea(); // 抽象方法 求面积

public abstract double getPerimeter(); // 抽象方法 求周长

}

###直角三角形类的定义:

直角三角形类的构造函数原型如下:
RTriangle(double a, double b);

其中 ab 都是直角三角形的两条直角边。

裁判测试程序样例:

import java.util.Scanner;
import java.text.DecimalFormat;
 
interface IShape {
    public abstract double getArea();
 
    public abstract double getPerimeter();
}
 
/*你写的代码将嵌入到这里*/


public class Main {
    public static void main(String[] args) {
        DecimalFormat d = new DecimalFormat("#.####");
        Scanner input = new Scanner(System.in);
        double a = input.nextDouble();
        double b = input.nextDouble();
        IShape r = new RTriangle(a, b);
        System.out.println(d.format(r.getArea()));
        System.out.println(d.format(r.getPerimeter()));
        input.close();
    }
}

输入样例:

3.1 4.2

输出样例:

6.51
12.5202
java 复制代码
class RTriangle implements IShape{
    private double side1,side2;
    public RTriangle(double a,double b){
        this.side1=a;
        this.side2=b;
    }
    public double getArea(){
        return 0.5*side1*side2;
    }
    public double getPerimeter(){
        double c=Math.sqrt(side1*side1+side2*side2);
        return side1+side2+c;
    }
}

6-2 从抽象类shape类扩展出一个圆形类Circle

请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。

public abstract class shape {// 抽象类

public abstract double getArea();// 求面积

public abstract double getPerimeter(); // 求周长

}

主类从键盘输入圆形的半径值,创建一个圆形对象,然后输出圆形的面积和周长。保留4位小数。

圆形类名Circle

裁判测试程序样例:

import java.util.Scanner;
import java.text.DecimalFormat;
 
abstract class shape {// 抽象类
     /* 抽象方法 求面积 */
    public abstract double getArea( );
 
    /* 抽象方法 求周长 */
    public abstract double getPerimeter( );
}

/* 你提交的代码将被嵌入到这里 */

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        DecimalFormat d = new DecimalFormat("#.####");// 保留4位小数
         double r = input.nextDouble( ); 
        shape c = new  Circle(r);
 
        System.out.println(d.format(c.getArea()));
        System.out.println(d.format(c.getPerimeter()));
        input.close();
    } 
}

输入样例:

3.1415926

输出样例:

31.0063
19.7392
java 复制代码
class Circle extends shape{
    private double radius;
    public Circle (double newRadius){
        this.radius=newRadius;
    }
    public double getArea(){
        return Math.PI*radius*radius;
    }
    public double getPerimeter(){
        return 2*Math.PI*radius;
    }
}

6-3 求正n边形的面积和周长

在一个正n边形(Regular Polygon)中,所有边的边长都相等,且所有角的度数相同(即这个多边形是等边、等角的)。我们已经从下列接口IShape实现了一个正n边形类RegularPolygon。其构造方法为:RegularPolygon(int n,double side); 其中n为边数,side为边长。

从键盘输入正n边形的边数n和边长a,请编程计算该正n边形的面积和周长。

interface IShape {// 接口

double getArea(); // 求面积

double getPerimeter();// 求周长

}

裁判测试程序样例:

interface IShape {// 接口

double getArea(); // 求面积

double getPerimeter();// 求周长

}
/* 这里有正n边形类RegularPolygon的实现*/

public class Main {
    public static void main(String[] args) {
    
        /* 你提交的代码将嵌入到这里 */ 
        
    }
}
### 输入样例:

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

```in
5
7

输出样例:

在这里给出相应的输出。要求保留4位小数,例如:

84.3034
35
java 复制代码
import java.util.Scanner;
interface IShape {
double getArea();
double getPerimeter();
}
class RegularPolygon implements IShape{
    public double side;
    public int n;
    public RegularPolygon(int newN,double newSide){
        this.n=newN;
        this.side=newSide;
    }
    public double getArea(){
       double angle=Math.toRadians(180/n);
       return (n*side*side)/(4*Math.tan(angle));
    }
    public double getPerimeter(){
        return n*side;
    }
}
public class Main{
	    public static void main(String[] args) {
	    	Scanner scanner=new Scanner(System.in);
	        int k=scanner.nextInt();
	        double l=scanner.nextDouble();
	        RegularPolygon polygon=new RegularPolygon(k,l);
	        System.out.printf("%.4f\n",polygon.getArea());
	        System.out.printf("%d",(int)polygon.getPerimeter());
	    }
	}
7-1 jmu-Java-04面向对象进阶--02-接口-Comparator

Arrays.sort可以对所有实现Comparable的对象进行排序。但如果有多种排序需求,如有时候需对name进行降序排序,有时候只需要对年龄进行排序。使用Comparable无法满足这样的需求。可以编写不同的Comparator来满足多样的排序需求。

1.编写PersonSortable2类

属性:private name(String)private age(int)

有参构造函数:参数为name,age

toString方法:返回格式name-age

2 编写Comparator类

  1. 编写NameComparator类,实现对name进行升序排序
  2. 编写AgeComparator类,对age进行升序排序

3.main方法中

  1. 输入n

  2. 输入n行name age,并创建n个对象放入数组

  3. 对数组按照name进行升序排序后输出。

  4. 在3的基础上对数组按照age进行升序排序后输出。

  5. 最后最后两行使用如下代码输出NameComparator与AgeComparator所实现的所有接口。

    System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
    System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));

输入样例:

5
zhang 15
zhang 12
wang 14
Wang 17
li 17

输出样例:

NameComparator:sort
Wang-17
li-17
wang-14
zhang-15
zhang-12
AgeComparator:sort
zhang-12
wang-14
zhang-15
Wang-17
li-17
//最后两行是标识信息
java 复制代码
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        PersonSortable2[] people = new PersonSortable2[n];
         System.out.println("NameComparator:sort");
        for (int i = 0; i < n; i++) {
            String name = scanner.next();
            int age = scanner.nextInt();
            people[i] = new PersonSortable2(name, age);
        }
        Arrays.sort(people, new NameComparator());
        for (PersonSortable2 person : people) {
            System.out.println(person);
        }
        System.out.println("AgeComparator:sort");
        Arrays.sort(people, new AgeComparator());
        for (PersonSortable2 person : people) {
            System.out.println(person);
        }
        System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
        System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));
    }
    static class PersonSortable2 {
        private String name;
        private int age;
        public PersonSortable2(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public int getAge() {
            return age;
        }
        public String toString() {
            return name + "-" + age;
        }
    }
    static class NameComparator implements Comparator<PersonSortable2> {
        public int compare(PersonSortable2 o1, PersonSortable2 o2) {
            return o1.getName().compareTo(o2.getName());
        }
    }
    static class AgeComparator implements Comparator<PersonSortable2> {
        public int compare(PersonSortable2 o1, PersonSortable2 o2) {
            return o1.getAge() - o2.getAge();
        }
    }
}
相关推荐
全栈Blue7 分钟前
详解代理模式-【静态代理与JDK动态代理】(非常的斯国一)
java·代理模式
易辰君21 分钟前
python爬虫 - 初识爬虫
开发语言·爬虫·python
长天一色29 分钟前
【C语言系统编程】【第三部分:网络编程】3.2 数据传输和协议
c语言·开发语言·网络
customer0833 分钟前
【开源免费】基于SpringBoot+Vue.JS美容院管理系统(JAVA毕业设计)
android·java·vue.js·spring boot·spring cloud·开源
结衣结衣.35 分钟前
Python基础语法1
开发语言·笔记·python·学习·编程·编程语法
风雨「83」40 分钟前
centos已安装python3.7环境,还行单独安装python3.10环境,如何安装,具体步骤
linux·开发语言·python
太自由1 小时前
SpringBoot之Profile的两种使用方式
java·spring boot·后端·profile·springboot多环境配置·profile注解
tiantian17)1 小时前
深入学习并发编程中的 synchronized
java·学习
碳苯1 小时前
【rCore OS 开源操作系统】Rust HashMap应用 知识点及练习题
开发语言·rust·操作系统
hakesashou1 小时前
php与python建站的区别有哪些
开发语言·php