SCAU java实验7 类与类之间的关系

实验7 类与类之间的关系
题目类别: 实验

关键字: 类、对象、封装、聚合、组合

内容要求:

一、实验目的

(1)在理解和掌握类的定义和封装的基础上了解类之间的关系。

(2)理解和掌握this关键字的使用。

二、实验内容

步骤1:按照以下要求编写一个名为Point的类,代表二维坐标系中的一个点。

(1) 放在包ex03中;

(2) 两个int类型的数据域x和y,分别代表点的横、纵坐标;

(3) 对数据域进行封装;

(4) 无参构造方法,初始化的坐标是(0,0);

(5) 有参构造方法,两个参数x,y分别初始化数据域x和y;

(6) 一个计算两个点之间距离的方法distance(Point other),返回值类型double,表示当前对象与参数对象之间的距离。

步骤2:按照以下要求编写一个名为Circle的类,代表二维坐标系中的一个圆。

(1) 放在包ex03中;

(2) 一个Point类型的数据域center,代表圆的圆心;

(3) 一个double类型的数据域radius,代表圆的半径;

(4) 对数据域进行封装;

(5) 无参构造方法将圆心坐标设为坐标圆点(0,0),半径设为1.0;

(6) 有参构造方法需要根据参数值设置圆心坐标和半径值;

(7) 一个计算圆面积的方法double getArea();

(8) 一个判断当前圆对象与参数圆对象是否相交的方法(相交方式见下图):

boolean isIntersected(Circle other)

(9) 一个判断当前圆对象是否包含参数圆对象的方法(包含方式见下图):

boolean contains(Circle other)

(10)提供返回当前圆的字符串的方法,返回的字符串格式为:[Circle(x,y)-raduis]

String getCircle()

步骤3:按照以下要求编写一个名为Circles的类,其中包含一个对圆操作的功能。

(1) 放在包ex03中;

(2) 编写静态方法createCircles,

参数:int n,表示生成圆的个数;

返回值:Circle[],存放生成圆对象的数组;

功能:生成位置和大小均随机的n个圆对象。

(3) 编写静态方法outputCircles,

参数:Circle[],存放圆对象的数组;

返回值:void

功能:输出数组中所有的圆,每行一个;

(4) 编写静态方法getIsolatedCircles

参数:Circle[] circles

返回值:Circle[],由符合条件的圆组成的数组

功能:找到参数circles数组中所有孤立的圆,孤立圆是指该圆与数组中其他的圆都不存在相交或包含的关系。

步骤4:按照以下要求编写主类Main, 放在包main中,主方法main实现以下步骤:

(1) 从键盘输入生成圆的个数n;

(2) 生成n个圆对象并存放在数组中;

(3) 输出这n个圆对象;

(4) 找出这n个圆中的孤立圆,存储在数组中;

(5) 输出所有的孤立圆,如果没有输出“无孤立圆”。

提交:打包为可以执行的JAR文档,其中要包含源程序文件。

Point

package ex03;

public class Point {
    private int x;
    private int y;
    Point(){
        x=0;
        y=0;
    }
    Point(int x,int y){
        this.x=x;
        this.y=y;
    }
    double distance(Point other){
        double d=(this.x-other.x)*(this.x-other.x)+(this.y-other.y)*(this.y-other.y);
        d=Math.sqrt(d);
        return d;
    }
    int getX(){
        return this.x;
    }
    int getY(){
        return this.y;
    }
}

Circle

package ex03;

public class Circle {
    private Point center;
    private double radius;
    Circle (){
        center=new Point();
        radius=1.0;
    }
    Circle(int x,int y,double radius){
        center=new Point(x,y);
        this.radius=radius;
    }
    double getArea(){
        return 2*Math.PI*radius*radius;
    }
    boolean isIntersected(Circle other){
        double d=this.center.distance(other.center);
        if(d>(this.radius+ other.radius)||d+other.radius<this.radius){
            return false;
        }else {
            return true;
        }
    }
    boolean contains(Circle other){
        double d=this.center.distance(other.center);
        if(d+other.radius<this.radius&&this.radius>other.radius){
            return true;
        }else {
            return false;
        }
    }
    String getCircle(){
        int x=this.center.getX();
        int y=this.center.getY();
        String reBack="[Circle("+x+","+y+")-"+radius+"]";
        return reBack;
    }
}

Circles

package ex03;

import java.util.Random;

public class Circles {
    static Circle[] createCircles(int n){
        Circle[] reCircle=new Circle[n];
        Random r=new Random();
        for(int i=0;i<n;i++){
            int x=r.nextInt();
            int y=r.nextInt();
            double radius=r.nextDouble();
            reCircle[i]=new Circle(x,y,radius);
        }
        return reCircle;
    }
    static void outputCircles(Circle[] circles){
        for(int i=0;i<circles.length;i++){
            System.out.println(circles[i].getCircle());
        }
    }
    static Circle[] getIsolatedCircles(Circle[] circles){
        Circle[] rightCircles=new Circle[circles.length];
        int num=-1;
        for (int i=0;i<circles.length;i++){
            Circle test=circles[i];
            boolean flag=true;
            for(int j=0;j<circles.length;j++){
                if(i==j){
                    continue;
                }else{
                    flag=test.isIntersected(circles[j])||test.contains(circles[j]);
                }
            }
            if(flag==false){
                num++;
                rightCircles[num]=test;
            }
        }
        return rightCircles;
    }
}

Main

package ex03;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner reader=new Scanner(System.in);
        int n;
        System.out.print("请输入生成圆的个数:");
        n=reader.nextInt();
        Circle[] circles;
        circles=Circles.createCircles(n);
        Circles.outputCircles(circles);
        Circle[] alongCircles;
        alongCircles=Circles.getIsolatedCircles(circles);
        System.out.println("-----------------------------------------");
        if(alongCircles[0]==null){
            System.out.println("无孤立圆");
            return;
        }
        for(int i=0;i< alongCircles.length&&alongCircles[i]!=null;i++){
            System.out.println(alongCircles[i].getCircle());
        }

    }
}

SCAU综合实验课程中的文件操作与字符处理是一门非常重要的课程,它教授了如何使用计算机来操作文件以及对文件中的字符进行处理。 文件操作是指使用计算机来创建、打开、读取、写入、修改和关闭文件的过程。在实验中,我们学习了如何使用C++编程语言来实现这些文件操作。通过实践,我们可以掌握文件的基本操作,比如创建文件、打开已存在的文件、从文件中读取数据、向文件中写入数据和关闭文件等等。这些操作对于日常的文件处理工作非常有用。 字符处理是指对文件中的字符进行操作和处理的过程。我们学习了如何使用C++语言中的字符串和字符数组来对字符进行处理。通过实验,我们可以掌握字符串的创建、拼接、截取、替换和转换等操作。这些操作可以帮助我们更好地处理文件中的文本数据,比如查找特定的字符、计算字符串的长度、在字符串中查找子字符串等等。 此外,我们还学习了一些常见的文件操作和字符处理的应用,比如统计一个文件中的字符数、单词数和行数,将一个文件中的大写字母转换为小写字母,将一个文件中的所有空格替换为换行符等等。这些应用可以帮助我们更好地理解文件操作和字符处理的实际应用场景,并提高我们的实际操作能力。 综上所述,SCAU综合实验中的文件操作与字符处理课程是非常实用和重要的一门课程,它教授了我们使用计算机来操作文件和处理字符的技能和知识。通过学习这门课程,我们可以提高我们的实际操作能力,为以后的工作做好准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值