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));
	}
}

你可能感兴趣的:(Java,java,开发语言,jvm)