练习

45 阅读1分钟

image.png

object ddd54 {
  class LabelPoint(val label: String, x: Double, y: Double) extends Point(x, y) {
    // 增强 toString,包含标签信息
    override def toString: String = s"LabelPoint($label, x=$x, y=$y)"
  }
  class Point(var x: Double, var y: Double) {
    // 方法1:判断象限
    def whereAMI(): String = {
      if (x > 0 && y > 0) "第一象限"
      else if (x < 0 && y > 0) "第二象限"
      else if (x < 0 && y < 0) "第三象限"
      else if (x > 0 && y < 0) "第四象限"
      else "坐标轴上"
    }

    // 方法2:到原点的距离
    def getDist(): Double = Math.sqrt(x * x + y * y)

    // 方法3:到另一点的距离
    def fromPoint(other: Point): Double = {
      val dx = x - other.x
      val dy = y - other.y
      Math.sqrt(dx * dx + dy * dy)
    }

    // 方法4:重写 equals(判断是否为同一坐标点)
    override def equals(obj: Any): Boolean = obj match {
      case that: Point => this.x == that.x && this.y == that.y
      case _ => false
    }

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

  def main(args: Array[String]): Unit = {
    val p1 = new Point(3.0, 4.0)
    val p2 = new Point(1.0, 2.0)
    val lp = new LabelPoint("black", 1.0, 2.0)

    println(p1.whereAMI())       // 输出:第一象限
    println(p1.getDist())        // 输出:5.0(勾股定理:√(3² + 4²) = 5)
    println(p1.fromPoint(p2))    // 输出:√((3-1)² + (4-2)²) = √8 ≈ 2.828
    println(p1.equals(p2))       // 输出:false(x 和 y 不全相等)
    println(p1.toString)         // 输出:(x=3.0, y=4.0)
    println(lp.toString)         // 输出:LabelPoint(black, x=1.0, y=2.0)

  }
}