定义类强化——定义类Point

本文详细描述了一个名为Point的Java类,用于表示二维坐标系中的点,包括私有变量、构造器、getter方法、moveTo移动方法和calDistance计算两点间距离的方法。示例展示了如何在Main类中创建和使用这些功能。
摘要由CSDN通过智能技术生成

定义一个类Point,表示二维坐标系上的一个点;Point类包含有:

1、2个私有的double类型的成员变量,表示点的x坐标和y坐标;

2、一个无参数的构造器,该构造器创建的点为坐标系原点(0,0)

3、带参数构造器,按指定的x和y值创建点对象;

4、两个成员变量的getter方法;

5、定义成员方法:moveTo(double x,double y) ,该方法表示将当前点移动到指定位置;

6、定义成员方法:calDistance(Point target),该方法计算当前点与目标点(target)之间的距离

提示:

我们还是先把可以直接把成员变量和构造器的方法写上:

Main类代码:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Point originPoint = new Point();
        Scanner scanner = new Scanner(System.in);
        double x = scanner.nextDouble();
        double y = scanner.nextDouble();
        Point point = new Point(x,y);
        System.out.println("The point's x is "+point.getX()+" and point's y is "+point.getY());
        System.out.printf("The distance from point to origin is:%.3f%n",point.calDistance(originPoint));
        point.moveTo(20,10);
        System.out.printf("After move,the distance from point to origin is:%.3f",point.calDistance(originPoint));
    }
}

 输入样例:

输入一个点的x坐标值和y坐标值,用空格分开:

15 25.5

 输出样例:

The point's x is 15.0 and point's y is 25.5
The distance from point to origin is:29.585
After move,the distance from point to origin is:22.361

代码——

 1——4题直接代码

class Point
{
    private double x;
    private double y;
    public Point()
{
     x = 0.0;
     y = 0.0;

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

}//有参构造器

public double getX()
{
   return x;
}

public double getY()
{
    return y;
}
}

5 .写一个方法 表示将当前点移动到指定位置

这个大白话翻译过来,就是改变x,y的值不是?

这就是赋值的一般方法:

public void moveTo(double x,double y)//没有返回值
{
    this.x = x;
    this.y = y;

}

6.该方法计算当前点与目标点(target)之间的距离

我们看下面的距离公式,也是拿一个对象中的x,y对应计算。我原先还想用数组,发现JAVA和C就是不一样吼,当然C里面也可以用结构体,这是题外话。

我们看这个方法的传参是一个对象。

引用类型传参

当传过去的参数是个对象,其类型就是我们定义的类名,为引用类型——我们传过去的是个地址。

先来看看引用类型:

引用类型和基本值类型对应,诸如:int,double,boolean,char...都是值类型。

可以知道引用类型传过去的不是值,而是什么?没错,地址。

至于,传参为引用类型的方法本质是对地址上的数据操作,还是另外的操作方式,这篇定义类强化就不过多讨论。

既然传过去的是一个对象,相当于对象里面的成员变量和方法都可供我们使用、派遣。

这意味着,我们不用再创建个数组啥的,因为x和y有一个共同的老大,它俩就算小弟。把老大传过来,小弟也就跟着来了。

继续分析:

当前点和目标点的计算怎么理解:

看一眼main代码,且看它意欲何为。

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Point originPoint = new Point();//创建对象,名字是最初的点
        Scanner scanner = new Scanner(System.in);
        double x = scanner.nextDouble();
        double y = scanner.nextDouble();//手动输入,xy的值,这时候应该用有参构造器把值传过去吧,有构造器就是构造新对象。构造器,一个对象调用一次
        Point point = new Point(x,y);//果然,这时候呢,创建了个新的对象,上面是赋值
        System.out.println("The point's x is "+point.getX()+" and point's y is "+point.getY());//拿到xy的值,并打印
        System.out.printf("The distance from point to origin is:%.3f%n",point.calDistance(originPoint));//注意看,这个calDistance是哪里的方法?正是新创建出的赋了值的对象,人家用了个.成员变量访问操作符,把最原先创建的对象传过去了
        point.moveTo(20,10);//移动point对象里面xy的值
        System.out.printf("After move,the distance from point to origin is:%.3f",point.calDistance(originPoint));//还是如上面,用的是point对象的方法,传最先创建的对象
    }
}

噢—我们了然了,用的是point对象里的方法。至于俩对象之间x和y的计算,就要明确点明是来自哪里的x和y。

我们使用 . 操作符来访问,多说一句:.操作符在c的结构体一章也意为:成员访问操作符。

那一串距离公式,我们知道xy怎么表示了,但是那一串根号和平方呢?

Math类

我们需要学习一个新类

还记得我们学习一个类的三步走吗?
导包——创建对象——实现

math类就很简单了,导包由Java来帮我们自动导入,我们创建对象和实现就行。创建对象也不需要new了,math类构造对象都是priavte,私人的,你构造了的话,就说明非法访问了,这是不行的。而且math类都是静态方法,也称类方法。

可知,math类的方法的直系上司就是类,我们用 类名.方法直接调用。

总结:math类导包和创建对象都不用我们来,直接类名调用方法达到实现的目的。

开方:
public double Math.sqrt(double a);
平方(n次方)
public double Math.pow(double a1,int a2)//第一个是底数,第二个是指数

api协议也确实是两个double 

 

分析差不了,现在代码就,犹抱琵琶半遮面了。

public double calDistance(Point target)//算距离,肯定有返回值。main代码里面也可求证
{
    return Math.sqrt(Math.pow(target.x - this.x,2) + Math.pow(target.y - this.y,2));//中间的俩平方和再开个方
}

 小总结:这俩方法咱积累一下,说不定以后还会遇见

完整代码参考:
 

package www.tot.demo;
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Point originPoint = new Point();
        Scanner scanner = new Scanner(System.in);
        double x = scanner.nextDouble();
        double y = scanner.nextDouble();
        Point point = new Point(x,y);
        System.out.println("The point's x is "+point.getX()+" and point's y is "+point.getY());
        System.out.printf("The distance from point to origin is:%.3f%n",point.calDistance(originPoint));
        point.moveTo(20,10);
        System.out.printf("After move,the distance from point to origin is:%.3f",point.calDistance(originPoint));
    }
}


class Point
{
    private double x;
    private double y;
    public Point()
    {
        x = 0.0;
        y = 0.0;

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

    }//有参构造器

    public double getX()
    {
        return x;
    }

    public double getY()
    {
        return y;
    }
    public void moveTo(double x,double y)//没有返回值
    {
        this.x = x;
        this.y = y;

    }
    public double calDistance(Point target)//算距离,肯定有返回值。main代码里面也可求证
    {
        return Math.sqrt(Math.pow(target.x - this.x,2) + Math.pow(target.y - this.y,2));//中间的俩平方和再开个方
    }
}

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值