定义类强化——移动的圆

news2025/1/12 19:05:12

1.构造一个Location类:

1)该类有两个double型私有成员变量x和y,分别表示横坐标和纵坐标;

2)该类有一个有参构造方法,能初始化成员变量x和y;

3)该类具有成员变量的x和y的访问方法和赋值方法。

2.构造一个Circle类:

1)该类有一个double型成员变量radius存放半径;

2)该类有一个Location型成员变量center,存放圆心坐标;

2)该类有一个有参构造方法Circle(double x, double y, double r),初始化成员变量radius、center,其中center的初始化过程是:使用参数x和y创建类Location的实例,并将这个对象引用赋值给center;

3)该类具有translate(double tx, double ty) 方法,方法无返回值,这个方法能移动圆心坐标,使x坐标增加tx,y坐标增加ty。

4)该类具有overlaps(Circle other)方法,该方法返回值为boolean型,方法判定参数圆是否和当前圆重叠。如果两个圆圆心的距离小于两个圆半径的和则两个圆重叠。圆心距离由如下公式计算:距离= sqrt((x1-x2)^2 + (y1-y2)^2)。其中(x1,y1) and (x2,y2) 分别是两个圆的圆心坐标。

3.主类中,要求用户输入第一个圆的圆心的x、y坐标、半径,创建第一个Circle类对象,然后用户输入第二个圆的圆心的x、y坐标、半径,创建第二个Circle类对象。当两个圆没有重叠时,将第二个圆的x和y坐标都移动0.5,直到两个圆出现重叠为止。

裁判测试程序样例:

import java.util.Scanner;
public class Main {
     public static void main(String[] args) {
       Scanner scanner=new Scanner(System.in);      
       double x=scanner.nextDouble();
       double y=scanner.nextDouble();
       double r=scanner.nextDouble();
       Circle c1 = new Circle(x,y,r);
       x=scanner.nextDouble();
       y=scanner.nextDouble();
       r=scanner.nextDouble();
       Circle c2 = new Circle(x,y,r);
       System.out.println("Circle 1's center is at ("+c1.getCenter().getX()+","+c1.getCenter().getY()+") with a radius of "+c1.getRadius());
       System.out.println("Circle 2's center is at ("+c2.getCenter().getX()+","+c2.getCenter().getY()+") with a radius of "+c2.getRadius());
     
      while(!c1.overlaps(c2))
      {
          c2.translate(0.5, 0.5);
          System.out.printf("Circle 2's center is now at (%.1f,%.1f)\n",c2.getCenter().getX(),c2.getCenter().getY());
      }
      System.out.printf("The circles now overlap!");
      scanner.close();
   }
}

/* 请在这里填写答案 */

输入样例:

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

3 3 0.25
0 0 1

输出样例:

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

Circle 1's center is at (3.0,3.0) with a radius of 0.25
Circle 2's center is at (0.0,0.0) with a radius of 1.0
Circle 2's center is now at (0.5,0.5)
Circle 2's center is now at (1.0,1.0)
Circle 2's center is now at (1.5,1.5)
Circle 2's center is now at (2.0,2.0)
Circle 2's center is now at (2.5,2.5)
The circles now overlap!

还是定义类的强化,基本的定义属性和构造器、方法,我们也不再多做介绍——需要细细了解的小伙伴,咱们移步前面的《定义类》

定义类:定义一个类Square表示正方形_定义一个square类,当客户访问该页面时,服务器创建该类的对象,只要客户给出正方形-CSDN博客

闲话少叙,正文开始: 

 直接肝的定义部分:

 

class Location
{
   private double x;
   private double y;//俩私有的成员变量

   public Location(double x,double y)
{
    this.x = x;
    this.y = y;
}//有参构造器

   public double getX()
{
    return x;
}
   public double getY()
{
    return y;
}//俩方法为成员变量的访问方法

   public void setX(double x)
{
    this.x = x;
}
   public void setY(double y)
{
    this.y = y;
}//俩方法为成员变量的赋值方法
   

}

Location类定义完成,接着是Circle类 

定义类:定义一个类Square表示正方形_定义一个square类,当客户访问该页面时,服务器创建该类的对象,只要客户给出正方形-CSDN博客

class Circle
{
   private double radius;//半径定义


}

划重点 

当本类中有个成员变量类型为——我们定义过的类 

可知,Location类是我们上面定义的第一个类,现在在Circle类中需要创建个成员变量,类型就是Location。

定义有一个Location型成员变量,名字叫center。意欲何为?存放圆心坐标。

怎么理解?既然center的类型是Location,center本身应该就是一个实例化的类——即对象。

对象怎么来?自然是创建:调用构造器。

至于存放圆心坐标,简直是个很妙的设计:就像一个数组,把x,y聚在一堆。但是又和数组不同,不需要下标,循环啥的访问。直接.操作符,要谁点谁。

代码长这样:

class Circle
{
   private double radius;//半径定义

   private Location center = new Location();//类中成员为另一类的实例对象,需要创建,new+构造器
}

发现前面没有默认构造器是不是?在前面添一个就是。

class Location{
public Location()
    {
        
    }//添加进去,我这里就不拷贝前面的了
}

 Circle类的有参构造器

“并将这个对象引用赋值给center”,意思就是把传过来的x,y赋值给center里面的x,y。

至于说引用赋值,就是传参——什么时候传参,自然是需要调用参数的方法里面。可见,题目上也暗示我们直接给人x,y赋值是行不通的。

还记得大明湖畔:公开访问和赋值私有成员变量的两个方法吗?setter和getter方法:公开是让你随时随地调用。

以后的题目,一般就默认说赋值,提示语句就不会有了。

咱们再看眼代码,就了然了。

class Circle
{
   private double radius;//半径定义
   private Location center = new Location();//类中成员为另一类的实例对象,需要创建,new+构造器
   public Circle(double x,double y,double radius)
   {
     this.center.setX(x);//“这个对象引用赋值”就是用center这个对象名,加上.操作符
     this.center.setY(y);//标准反面教材:this.center.x = x;要是center的x能被公开访问,这样写可以。可是上一个类里面,x属于private,不能在其他类里面公开访问,更别说赋值
     this.radius = radius;
     
}//有参构造器

   
}

举一反三:

 它的代码逻辑:也是改变x,y的值(赋值)

代码如下:

public void translate(double tx,double ty)
{
    this.center.setX(center.getX() + tx);
    this.center.setY(center.getY() + ty);//一定要在每个方法调用的时候,前面加上引用出处。咱们一般调用的是实例方法,缺少“实例”(对象名)也不行。这里的center.getY()
/*标准错误写法:this.center.x = center.x + tx;
               this.center.y = center.y + ty;又是公开访问私有变量*/


}

 正是返回好Boolean,判断时节又逢君(Math类)

:该类具有overlaps(Circle other)方法,该方法返回值为boolean型,方法判定参数圆是否和当前圆重叠。如果两个圆圆心的距离小于两个圆半径的和则两个圆重叠。圆心距离由如下公式计算:距离= sqrt((x1-x2)^2 + (y1-y2)^2)。其中(x1,y1) and (x2,y2) 分别是两个圆的圆心坐标。 

这题明眼就看出来,代码逻辑已经跃然纸上。

前面我们说会再次遇见Math类的俩方法,所谓念念不忘,必有回响:

public boolean overlaps(Circle other)//传参为一个对象,要的是里面的成员和方法
{
    double dis = 0.0;//俩圆心距离
dis = Math.sqrt(Math.pow((this.center.getX() - other.center.getX(),2 + Math.pow(this.center.getY() - other.center.getY(),2));
/*这个dis代码看着长,就是两部分,Math.pow() + Math.pow(),再对它俩和开方 */
    if(dis < this.radius + other.radius)
      return true;//boolean的值有俩:true,false(不是1和0)
    else
      return false;


}

this指的是本对象.里面的成员(center).成员里面的成员(x,y)。 --- 可千万不能忽略了谁

针对这种成员变量center的代码:

要点有3:

1.定义的时候,记得能创建就创建——创建什么?这个类的实例对象(center)

2.后面只要涉及这个对象里面的成员(x,y),不可直接调用,采用合法的访问和赋值方法。(setter和getter),要使用私有变量,优先考虑getter;赋值,就是setter

3.对这个对象的访问和赋值方法,写返回类型的是——它所属的类

实践出真知嘛,上面都是改出来的总结。

完整代码参考:

class Location
{
    private double x;
    private double y;
    public Location()
    {
        
    }

    public Location(double x,double y)
    {
        this.x =x;
        this.y = y;   
    }

    public void setX(double x)
    {
      this.x = x;
        
    }
    public void setY(double y)
    {
        this.y = y;
    }
    public double getX()
    {
        return x;
    }
    public double getY()
    {
        return y;
    }
    
}

class Circle
{
      private double radius;
      private Location center = new Location();

    public Circle(double x,double y,double r)
    {
       center.setX(x);//center 的初始化
       center.setY(y);
        radius = r;
    }
     public void translate(double tx,double ty)
     {
        center.setX(center.getX() + tx);
        center.setY(center.getY() + ty);
         
     }
    public boolean overlaps(Circle other)
    {
        double dis = 0.0;
        dis = Math.sqrt(Math.pow(other.center.getX() - this.center.getX(),2) + Math.pow(other.center.getY() - this.center.getY(),2));
        if(dis < other.radius + this.radius)
            return true;
        else
            return false;
        }
    public Location getCenter()
    {
        return center;
    }
    public double getRadius()
    {
        return radius;
    }
    
    


    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1548252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

30---SDRAM电路设计

视频链接 SDRAM电路设计01_哔哩哔哩_bilibili SDRAM电路设计 1、SDRAM简介 SDRAM&#xff1a;Synchronous Dynamic Random Access Memory&#xff0c;同步动态随机存储器。 同步是指其时钟频率和CPU前端总线的系统时钟相同&#xff0c;并且内部命令的发送与数据的传输都以…

【保姆级讲解如何Stable Diffusion本地部署】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

基于Java的校园疫情防控管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

基于nodejs+vue饮食分享平台python-flask-django-php

本系统采用了nodejs语言的express框架&#xff0c;数据采用MySQL数据库进行存储。进行开发设计&#xff0c;功能强大&#xff0c;界面化操作便于上手。本系统具有良好的易用性和安全性&#xff0c;系统功能齐全&#xff0c;可以满足饮食分享管理的相关工作。 前端技术&#xff…

设计模式学习笔记 - 设计模式与范式 -结构型:3.装饰器模式

概述 上篇文章《设计模式与范式 -结构型&#xff1a;2.桥接模式》&#xff0c;我们介绍了桥接模式&#xff0c;桥接模式的理解方式有两种。第一种理解方式是 “将抽象与实现解耦&#xff0c;让它们能独立开发”。这种理解方式比较特别&#xff0c;应用场景也不多。另一种理解方…

邮件营销工具的必备功能?如何选营销工具?

邮件营销工具的效果如何&#xff1f;营销工具怎么提升邮件营销&#xff1f; 一款优秀的邮件营销工具&#xff0c;不仅能够帮助企业高效地进行邮件发送&#xff0c;还能通过精准的数据分析和用户行为跟踪&#xff0c;提升营销效果。AokSend将探讨邮件营销工具的必备功能。 邮件…

软件杯 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

代码随想录算法训练营 DAY 21 | 230.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.二叉树的最近公共祖先

230.二叉搜索树的最小绝对差 二叉搜索树&#xff0c;用中序遍历 用一个全局变量result存储最小绝对差&#xff0c;prev指针存储 在中的逻辑里去更新result&#xff08;保证prev不为空&#xff09;&#xff0c;然后更新prevcur。 牢记谦虚遍历的顺序&#xff01;pre紧跟在cu…

Spring高级面试题-2024

Spring 框架中都用到了哪些设计模式&#xff1f; 1. 简单工厂&#xff1a; ○ BeanFactory&#xff1a;Spring的BeanFactory充当工厂&#xff0c;负责根据配置信息创建Bean实例。它是一种工厂模式的应用&#xff0c;根据指定的类名或ID创建Bean对象。2. 工厂方法&#xff…

numcpp boostvs2017踩坑记录

之前想用boost1.69版本&#xff0c;但是boost与numcpp编译过程死活找不到boost1.69&#xff0c;踩坑无数&#xff0c;只能采用1.79版本。 https://www.cnblogs.com/tang-zhou-zhou/p/16067695.html 在 Windows 下通过 CMake 使用 Boost 库_cmake boost-CSDN博客 在VS2019中配…

析构 函数

对象死亡的时候会调用析构函数 #include<iostream> using namespace std;class MM { public:~MM(){cout << "调用析构函数" << endl << endl;}};int main() {{MM mm;//动态申请的内存需要手动释放MM* p new MM();cout << "1...…

【Java常用的API】JDK7以前时间相关类

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

js实现拖放效果

dataTransfer对象 说明&#xff1a;dataTransfer对象用于从被拖动元素向放置目标传递字符串数据。因为这个对象是 event 的属性&#xff0c;所以在拖放事件的事件处理程序外部无法访问 dataTransfer。在事件处理程序内部&#xff0c;可以使用这个对象的属性和方法实现拖放功能…

Linux(centos7)部署hadoop集群

部署环境要求:已完成JDK环境部署、配置完成固定IP、SSH免费登录、防火墙关闭等。 1、下载、上传主机 官网:https://hadoop.apache.org 2、解压缩、创建软连接 解压: tar -zxvf hadoop-3.3.6.tar.gz软连接: ln -s /usr/local/apps/hadoop-3.3.6 hadoop3、文件配置 hadoo…

合辑下载 | MatrixOne 与 MySQL 全面对比

前言 MatrixOne是一款高度兼容MySQL语法的HTAP数据库&#xff0c;采用云原生化和存储、计算、事务分离的架构打造了HSTAP超融合数据引擎&#xff0c;实现单一数据库系统同时支持OLTP、OLAP、流计算等多种业务负载。基于MatrixOne高度兼容MySQL的定位&#xff0c;社区的小伙伴在…

多层陶瓷电容器(MLCC)的基本结构与特点

多层陶瓷电容器&#xff08;MLCC&#xff09;是一种电子元件&#xff0c;用于存储电荷和调节电路中的电容值。它们由多个陶瓷层组成&#xff0c;每个层之间夹有金属电极&#xff0c;然后堆叠在一起&#xff0c;并在两端连接上导体引线&#xff0c;形成一个整体结构。在外部通常…

【保姆级讲解如何下载MATLAB和安装MATLAB】

&#x1f308;博主&#xff1a;程序员不想YY啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f91d;希望本文对您有所裨益&#xff0c;如有…

【Java程序设计】【C00384】基于(JavaWeb)Springboot的民航网上订票系统(有论文)

【C00384】基于&#xff08;JavaWeb&#xff09;Springboot的民航网上订票系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

Linux的VirtualBox中USB设备无法选择USB3.0怎么办?

在VirtualBox中&#xff0c;如果遇到USB设备无法选择 USB 3.0 的问题&#xff0c;可以尝试按照以下步骤来解决&#xff1a; 确保VirtualBox版本支持USB 3.0&#xff1a;首先&#xff0c;你需要确认你的VirtualBox版本是否支持USB 3.0。一些较旧的版本可能不支持&#xff0c;因此…

09 网络ARP请求,响应,ICMP协议

arp协议_arp请求_arp回应 ICMP包构造ping搜狐服务器参考 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <linux/if_packet.h> #include <linux/if_ether.h> #include <string.h> #includ…