Scala案例:坐标系中的点

51 阅读1分钟

案例:

题目:设计一个Point类,其x和y可以通过构造器提供。 它有几个方法:

  1. 方法1:计算自己在哪个象限。whereAmI():String
  2. 方法2:计算和坐标原点的距离。getDist():Double
  3. 方法3:计算与另一个点的距离。fromPoint(other:Point):Double
  4. 方法4:重写equals判断是否是同一个点(x和y都相等就是同一个点)。
  5. 方法5:重写toString,更友好的输出点的信息。

再设计一个子类LabelPoint它来继承Point类,其构造器接收一个标签值和x,y坐标。 例如New.LabelPoint(“black”,1,2)

import scala.math.sqrt

object class14 {

  class Point(val x: Double, val y: Double) {

    // 方法1: 计算自己在哪个象限。 whereAmI():String
    def whereAmI(): String = {
      if (x == 0 && y == 0) {
        "原点"
      } else if (x == 0) {
        "在y轴上"
      } else if (y == 0) {
        "在x轴上"
      } else if (x > 0 && y > 0) {
        "第一象限"
      } else if (x < 0 && y > 0) {
        "第二象限"
      } else if (x < 0 && y < 0) {
        "第三象限"
      } else { // x > 0 && y < 0
        "第四象限"
      }
    }

    // 方法2: 计算该点到坐标原点 (0, 0) 的距离。getDist():Double
    def getDist(): Double = {
      sqrt(x * x + y * y)
    }

    // 方法3: 计算与另一个点的距离。fromPoint(other:Point):Double
    def fromPoint(other: Point): Double = {
      val dx = this.x - other.x
      val dy = this.y - other.y
      sqrt(dx * dx + dy * dy)
    }


    // 方法4: 重写equals 判断是否是同一个点(x和y都相等就是同一个点)。
    override def equals(obj: Any): Boolean = {
      val other = obj.asInstanceOf[Point]
      this.x == other.x && this.y == other.y
    }

    // 方法5: 重写toString,更友好的输出点的信息。
    override def toString: String = {
      s"Point(${x},${y})"
    }

  }


  def main(args: Array[String]): Unit = {
    val p1 = new Point(1,1)
    println(p1)

  }

}