函数题:圆形类
构造一个抽象类Shape表示形状类 ,该类实现了Comparable<Shape>接口 。
* 该类有公共一个的抽象方法getArea(),不带参数,返回类型为双精度浮点数。
* 该类有一个公共的方法int compareTo(Shape shape),如果当前形状对象的面积大于参数shape的面积,返回1;如果当前形状对象的面积小于参数shape的面积,返回-1;否则返回0。
* 该类有一个公共的静态方法Shape max(Shape s1, Shape s2),调用compareTo(Shape shape)方法比较两个形状对象s1和s2的大小,如果s1大于等于s2,返回s1;否则,返回s2。
构造一个Circle表示形状 ,该类继承了Shape类 。
* 该类有一个私有的双精度成员变量radius,radius必须大于0;
* 该类有一个无参数的构造方法,将radius初始化为1.0。
* 该类有一个带一个double型参数的构造方法,用参数的值初始化radius。
* 该类有一个公共方法getRadius(),返回raduis的值。
* 该类有一个公共方法setRadius(double radius),当参数radius大于0时,将参数的值赋值给成员变量radius;否则抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"圆的半径必须大于0"。
* 该类有一个公共方法getArea(),返回圆形的面积。
* 该类有一个公共方法toString(),根据圆形的数据生成并返回一个字符串(具体要求看输出样例)。
从键盘输入两个浮点数作为半径创建两个圆形对象,如果两个圆形对象的半径都是合法的,比较并输出两个圆形中最大的那个;否则输出捕捉到的异常对象中的消息。
### 裁判测试程序样例:
c++
/* 请在这里填写答案 */
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
try {
Shape c1 = new Circle(scanner.nextDouble());
Shape c2 = new Circle(scanner.nextDouble());
System.out.printf("The max Circle of " + c1 + " and " + c2 + " is " + Shape.max(c1, c2));
} catch (IllegalArgumentException e){
System.out.println(e.getMessage());
}
}
}
### 输入样例1:
in
1.1 2.3
### 输出样例1:
out
The max Circle of Circle(1.1) and Circle(2.3) is Circle(2.3)
### 输入样例2:
in
-1 2.1
### 输出样例2:
out
圆的半径必须大于0
答案:若无答案欢迎评论
* 该类有公共一个的抽象方法getArea(),不带参数,返回类型为双精度浮点数。
* 该类有一个公共的方法int compareTo(Shape shape),如果当前形状对象的面积大于参数shape的面积,返回1;如果当前形状对象的面积小于参数shape的面积,返回-1;否则返回0。
* 该类有一个公共的静态方法Shape max(Shape s1, Shape s2),调用compareTo(Shape shape)方法比较两个形状对象s1和s2的大小,如果s1大于等于s2,返回s1;否则,返回s2。
构造一个Circle表示形状 ,该类继承了Shape类 。
* 该类有一个私有的双精度成员变量radius,radius必须大于0;
* 该类有一个无参数的构造方法,将radius初始化为1.0。
* 该类有一个带一个double型参数的构造方法,用参数的值初始化radius。
* 该类有一个公共方法getRadius(),返回raduis的值。
* 该类有一个公共方法setRadius(double radius),当参数radius大于0时,将参数的值赋值给成员变量radius;否则抛出一个IllegalArgumentException异常对象,异常对象的成员变量message为"圆的半径必须大于0"。
* 该类有一个公共方法getArea(),返回圆形的面积。
* 该类有一个公共方法toString(),根据圆形的数据生成并返回一个字符串(具体要求看输出样例)。
从键盘输入两个浮点数作为半径创建两个圆形对象,如果两个圆形对象的半径都是合法的,比较并输出两个圆形中最大的那个;否则输出捕捉到的异常对象中的消息。
### 裁判测试程序样例:
c++
/* 请在这里填写答案 */
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
try {
Shape c1 = new Circle(scanner.nextDouble());
Shape c2 = new Circle(scanner.nextDouble());
System.out.printf("The max Circle of " + c1 + " and " + c2 + " is " + Shape.max(c1, c2));
} catch (IllegalArgumentException e){
System.out.println(e.getMessage());
}
}
}
### 输入样例1:
in
1.1 2.3
### 输出样例1:
out
The max Circle of Circle(1.1) and Circle(2.3) is Circle(2.3)
### 输入样例2:
in
-1 2.1
### 输出样例2:
out
圆的半径必须大于0
答案:若无答案欢迎评论