7-12 计算两点间的距离JAVA(加强对getset方法的理解)

设计一个MyPoint类,表示具有x坐标和y坐标的点

要求:

(1) 两个私有成员变量x和y表示坐标值;定义x和y的set和get方法

(2) 无参构造方法创建点(0,0);

(3) 一个有参构造方法,根据参数指定坐标创建一个点;

(4) distance方法(static修饰)返回值为MyPoint类型的两个点对象之间的距离。

两点之间的距离公式为 d=√[(x1-x2)²+(y1-y2)²](可查阅API文档中的Math类)

编写主类Main,在主类中输入两点坐标,创建两个点对象,利用distance方法计算这两个点之间的距离。

输入格式:

输入两个点的坐标。

输出格式:

输出两点间距离。

输入样例:

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

2 3
2 6

输出样例:

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

3.0

最简单的方法:

package test0611;

import java.util.Scanner;

class MyPoint{
	private double x;
	private double y;
	public MyPoint() {
		this(0,0);
	}
	public MyPoint(double x, double y) {
		super();
		this.x = x;
		this.y = y;
	}
	
	public double getX() {
		return x;
	}
	public void setX(double x) {
		this.x = x;
	}
	public double getY() {
		return y;
	}
	public void setY(double y) {
		this.y = y;
	}
	static double distance(MyPoint p[]) {
		return Math.sqrt(Math.pow(p[0].x-p[1].x,2)+Math.pow(p[0].y-p[1].y,2));
	}
}
public class test12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		MyPoint p[]=new MyPoint[2];
		MyPoint p1=new MyPoint();
		p[0]=new MyPoint(sc.nextDouble(),sc.nextDouble());
		p[1]=new MyPoint(sc.nextDouble(),sc.nextDouble());
		System.out.println(MyPoint.distance(p));
	}

}
/*
 * 如果这道题还要求输出无参构造方法的值,那么就不用这样写, 必须得加上getset方法,通过p.getX()方法才能输出xy的值
 */

类似的方法: 


import java.util.Scanner;

class MyPoint{
	private double x;
	private double y;
	public MyPoint() {
		this(0,0);
	}
	public MyPoint(double x, double y) {
		super();
		this.x = x;
		this.y = y;
	}
	public double getX() {
		return x;
	}
	public void setX(double x) {
		this.x = x;
	}
	public double getY() {
		return y;
	}
	public void setY(double y) {
		this.y = y;
	}
	
}
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		MyPoint p1=new MyPoint(sc.nextDouble(),sc.nextDouble());
		MyPoint p2=new MyPoint(sc.nextDouble(),sc.nextDouble());
		System.out.println(distance(p1,p2));
		
	}
	 static double distance(MyPoint p1,MyPoint p2) {
		 return Math.sqrt(Math.pow(p1.getX()-p2.getX(),2)+Math.pow(p1.getY()-p2.getY(),2));
		 
	 }
}
/*
 * 在该代码中,distance方法是一个静态方法,而直接调用p1.x和p1.y是访问非静态成员变量,需要通过对象来访问。
 * 而在静态方法中无法访问非静态成员变量,因此不能直接调用p1.x和p2.y,
 * 需要通过调用p1.getX(),p2.getY()等方法来访问p1和p2对象的属性。
 */

 这里为什么我要写两种呢,因为我对get和set方法使用还不是很透彻;

        我发现把distance方法写到测试类里面,如果不用setget方法,无法对x,y进行调用,因为是xy私有的,想要调用只能通过p.getX()方法获取。所以在这种情况下,就必须得写出getset方法。

        再回头看第一种,因为distance方法是被MyPoint类所调用的自身方法,而数组p的类型是MyPoint类型,所以数组p中的每个元素都是MyPoint类型的对象,可以直接通过数组元素的索引来访问对象的属性x和y。因此,在distance方法中可以直接用p[0].x表示数组中第一个元素的x属性,用p[1].y表示数组中第二个元素的y属性。

第三种方法(麻烦):

package test0605;

import java.util.Scanner;

class MyPoint{
	private double x;
	private double y;
	public MyPoint() {
		this(0,0);
	}
	public MyPoint(double x, double y) {
		super();
		this.x = x;
		this.y = y;
	}
	public double getX() {
		return x;
	}
	public void setX(double x) {
		this.x = x;
	}
	public double getY() {
		return y;
	}
	public void setY(double y) {
		this.y = y;
	}
	
	
}
public class test12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		MyPoint p[]= new MyPoint[2];
		double x =sc.nextDouble();
		double y = sc.nextDouble();
		p[0]=new MyPoint();
		p[0].setX(x);
		p[0].setY(y);
		double x1 =sc.nextDouble();
		double y1 = sc.nextDouble();
		p[1]=new MyPoint();
		p[1].setX(x1);
		p[1].setY(y1);
		System.out.println(distance(p));
	}
	static double distance(MyPoint[] p) {
		double x=p[0].getX();
		double x1=p[1].getX();
		double y=p[0].getY();
		double y1=p[1].getY();
		return Math.sqrt(Math.pow(x-x1, 2)+Math.pow(y-y1, 2));
	}
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经纬度计算两点距离的公式可以根据不同的需求和精度进行选择。其中一种常用的公式是根据两点距离公式计算,公式为:距离 = sqrt( (lat2-lat1) * (lat2-lat1) + (lon2-lon1) * (lon2-lon1) )。其中,lat2和lat1分别表示两个点的纬度差,lon2和lon1表示两个点的经度差。这个公式适用于一般的计算,但在ArcGis等软件中,还需要考虑弧度和地球离心率的问题,以提高计算的准确性。\[1\] 另外,还有其他推导过程和公式可以用于经纬度计算两点距离,比如根据经纬度计算两点距离的公式推导过程以及google.maps的测距函数。这些公式的推导过程可以在网上找到,如果感兴趣的话可以了解一下。\[2\] 总之,根据经纬度计算两点距离的公式有多种选择,可以根据具体需求和精度要求来选择适合的公式进行计算。 #### 引用[.reference_title] - *1* [计算两个经纬度之距离](https://blog.csdn.net/READLEAF/article/details/106896900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [根据经纬度计算两点距离](https://blog.csdn.net/Gan_1314/article/details/125800224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [经纬度计算两地之距离(原理与方法)](https://blog.csdn.net/u011964285/article/details/40428527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mxrone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值