设计一个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));
}
}