题目
步骤1:
目前Ring类中包含3个数据域、2个构造方法和相应的计算方法。
在该类的基础上定义一个新圆环类GoodRing,文件名命名为:GoodRing.java。
回答下面的问题,并按照问题答案重新编写、编译GoodRing类。
(1)构造方法名应该改为什么?用哪个可见性修饰符修饰构造方法比较合理?
(2)3个数据域应该用哪个可见性修饰符修饰?编写对应的访问器和修改器并使用恰当的访问性修饰符。
(3)计算方法应该用哪个可见性修饰符修饰比较合理?
步骤2:
参照TestRing.java编写GoodRing类的测试类程序TestGoodRing.java,编译并运行。
main方法中完成如下工作:
(1)创建一个GoodRing类的对象。
(2)输出该对象的半径、颜色、面积和周长。
(3)修改该对象的半径,重新输出半径、颜色、面积和周长。
编译并运行。
步骤3:
编写一个GoodRingUtil类,其中按下面要求定义static方法:
(1) createGoodRings方法,
形式参数为int,表示创建GoodRing类对象的个数;
返回值为 GoodRing[],存放生成的多个GoodRing类对象;
随机生成各个GoodRing对象的内外半径。
(2) totalArea方法,
形式参数为 GoodRing[],表示传入的数组;
返回值为double, 表示数组中所有GoodRing对象的面积之和。
(3) sort方法,
形式参数为 GoodRing[],表示传入的数组;
返回值为void
将数组中的GoodRing对象按面积从大到小排序。
(4) outputGoodRings方法,
形式参数为 GoodRing[],表示传入的数组;
返回值为void
输出数组中所有的GoodRing对象,包括内外半径、颜色和面积。每行输出一个GoodRing对象。
步骤4:
main方法中添加代码,调用GoodRingUtil类中的static方法完成如下工作:
(1)从键盘输入要创建的GoodRing对象的个数n;
(2)创建n个GoodRing对象的数组;
(3)输出n个GoodRing对象的面积之和;
(4)输出所有GoodRing对象;
(5)对数组进行排序;
(6)输出所有GoodRing对象;
编译并运行。
GoodRing类
package MorningPractice;
public class GoodRing {
private double innerRadius; //都改为private修饰符以封装原数据
private double outerRadius;
private String fillColor;
public GoodRing(double iRadius, double oRadius, String color) { //修改为public修饰符
innerRadius = iRadius;
outerRadius = oRadius;
fillColor = color;
}
public GoodRing(){ //修改为public修饰符
innerRadius = 1;
outerRadius = 2;
fillColor = "WHITE";
}
//三个修改器,用public修饰
public void setInnerRadius(double innerRadius) {
this.innerRadius = innerRadius;
}
public void setOuterRadius(double outerRadius) {
this.outerRadius = outerRadius;
}
public void setFillColor(String fillColor) {
this.fillColor = fillColor;
}
//三个访问器,用public修饰
public double getInnerRadius() {
return innerRadius;
}
public double getOuterRadius() {
return outerRadius;
}
public String getFillColor() {
return fillColor;
}
//计算方法用public修饰,允许
public double getArea() {
return ( Math.pow(outerRadius, 2) - Math.pow(innerRadius, 2) ) * Math.PI;
}
public double getInnerCircumference(){
return innerRadius * Math.PI * 2;
}
public double getOuterCircumference(){
return outerRadius * Math.PI * 2;
}
}
GoorRingUtil类
package MorningPractice;
import java.util.Random;
class GoodRingUtil {
public static GoodRing[] createGoodRings(int num){
// (1) createGoodRings方法,
// 形式参数为int,表示创建GoodRing类对象的个数;
// 返回值为 GoodRing[],存放生成的多个GoodRing类对象;
// 随机生成各个GoodRing对象的内外半径。
GoodRing[] arrayOfGoodRing = new GoodRing[num];
Random r = new Random(1);
for(int count = 0; count < num; count++){
arrayOfGoodRing[count] = new GoodRing();
arrayOfGoodRing[count].setOuterRadius(r.nextInt(100));
arrayOfGoodRing[count].setInnerRadius(r.nextInt((int)arrayOfGoodRing[count].getOuterRadius()));
}
return arrayOfGoodRing;
}
public static double totalArea(GoodRing[] arrayOfGoodRing){
// (2) totalArea方法,
// 形式参数为 GoodRing[],表示传入的数组;
// 返回值为double, 表示数组中所有GoodRing对象的面积之和。
double area = 0;
for(int count = 0; count < arrayOfGoodRing.length; count++){
area += arrayOfGoodRing[count].getArea();
}
return area;
}
public static void sort(GoodRing[] arrayOfGoodRing) {
// (3) sort方法,
// 形式参数为 GoodRing[],表示传入的数组;
// 返回值为void
// 将数组中的GoodRing对象按面积从大到小排序。
for (int i = 0; i < arrayOfGoodRing.length - 1; i++) {
//依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
for (int j = 0; j < arrayOfGoodRing.length - 1 - i; j++) {
// 比较相邻的元素,如果前面的数小于后面的数,就交换
if (arrayOfGoodRing[j].getArea() < arrayOfGoodRing[j + 1].getArea()) {
GoodRing temp = arrayOfGoodRing[j + 1];
arrayOfGoodRing[j + 1] = arrayOfGoodRing[j];
arrayOfGoodRing[j] = temp;
}
}
}
}
public static void outputGoodRings(GoodRing[] arrayOfGoodRing){
// (4) outputGoodRings方法,
// 形式参数为 GoodRing[],表示传入的数组;
// 返回值为void
// 输出数组中所有的GoodRing对象,包括内外半径、颜色和面积。每行输出一个GoodRing对象。
for(int count = 0; count < arrayOfGoodRing.length; count++){
System.out.println("输出第"+(count+1)+"个圆环的数据");
System.out.println("内圆半径:" + arrayOfGoodRing[count].getInnerRadius());
System.out.println("外圆半径:" + arrayOfGoodRing[count].getOuterRadius());
System.out.println("填充颜色:" + arrayOfGoodRing[count].getFillColor());
System.out.println("环的面积:" + arrayOfGoodRing[count].getArea());
System.out.println("环的内圆周长:" + arrayOfGoodRing[count].getInnerCircumference());
System.out.println("环的外圆周长:" + arrayOfGoodRing[count].getOuterCircumference());
System.out.println();
}
}
}
Main类
package MorningPractice;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
// main方法中添加代码,调用GoodRingUtil类中的static方法完成如下工作:
// (1)从键盘输入要创建的GoodRing对象的个数n;
// (2)创建n个GoodRing对象的数组;
// (3)输出n个GoodRing对象的面积之和;
// (4)输出所有GoodRing对象;
// (5)对数组进行排序;
// (6)输出所有GoodRing对象;
Scanner sc = new Scanner(System.in);
System.out.println("请输入要创建的GoodRing对象的个数n");
int numToCreate = sc.nextInt();
//创建n个GoodRing对象的数组
GoodRing[] Array = GoodRingUtil.createGoodRings(numToCreate);
//输出n个GoodRing对象的面积之和
System.out.println("所有圆环的总面积:"+GoodRingUtil.totalArea(Array));
System.out.println();
//输出所有GoodRing对象
GoodRingUtil.outputGoodRings(Array);
//对数组进行排序
GoodRingUtil.sort(Array);
//再次输出所有GoodRing对象
System.out.printf("\n==>>输出排序后的结果<<==\n\n");
GoodRingUtil.outputGoodRings(Array);
}
}
TestGoodRing类
package MorningPractice;
public class TestGoodRing {
public static void main(String[] args) {
// (1)创建一个GoodRing类的对象。
// (2)输出该对象的半径、颜色、面积和周长。
// (3)修改该对象的半径,重新输出半径、颜色、面积和周长。
GoodRing ring = new GoodRing();
//第一次输出
System.out.println("内圆半径:" + ring.getInnerRadius());
System.out.println("外圆半径:" + ring.getOuterRadius());
System.out.println("填充颜色:" + ring.getFillColor());
System.out.println("环的面积:" + ring.getArea());
System.out.println("环的内圆周长:" + ring.getInnerCircumference());
System.out.println("环的外圆周长:" + ring.getOuterCircumference());
//修改数据
ring.setInnerRadius(2);
ring.setOuterRadius(5);
ring.setFillColor("YELLOW");
//第二次输出
System.out.println("内圆半径:" + ring.getInnerRadius());
System.out.println("外圆半径:" + ring.getOuterRadius());
System.out.println("填充颜色:" + ring.getFillColor());
System.out.println("环的面积:" + ring.getArea());
System.out.println("环的内圆周长:" + ring.getInnerCircumference());
System.out.println("环的外圆周长:" + ring.getOuterCircumference());
}
}