scala
object W59 {
def main(args: Array[String]): Unit = {
import scala.math.sqrt
class Point(val x: Double, val y: Double) {
def distanceToOrigin: Double = sqrt(x * x + y * y)
def distanceTo(other: Point): Double = {
val dx = x - other.x
val dy = y - other.y
sqrt(dx * dx + dy * dy)
}
def quadrant: Int = (x, y) match {
case (x, y) if x > 0 && y > 0 => 1
case (x, y) if x < 0 && y > 0 => 2
case (x, y) if x < 0 && y < 0 => 3
case (x, y) if x > 0 && y < 0 => 4
case _ => 0
}
override def equals(other: Any): Boolean = other match {
case that: Point =>
(that canEqual this) &&
x == that.x &&
y == that.y
case _ => false
}
def canEqual(other: Any): Boolean = other.isInstanceOf[Point]
override def hashCode(): Int = {
val state = Seq(x, y)
state.map(_.hashCode()).foldLeft(0)((a, b) => 31 * a + b)
}
override def toString: String =
f"Point(x=$x%.2f, y=$y%.2f, 到原点距离=${distanceToOrigin}%.2f, 象限=$quadrant)"
}
class LabelPoint(val label: String, x: Double, y: Double) extends Point(x, y) {
override def toString: String =
f"LabelPoint(label='$label', x=$x%.2f, y=$y%.2f, 到原点距离=${distanceToOrigin}%.2f, 象限=$quadrant)"
}
object PointTest extends App {
val p1 = new Point(3, 4)
val p2 = new Point(0, 5)
val p3 = new Point(-2, -3)
val p4 = new Point(3, 4)
val origin = new Point(0, 0)
val labelP = new LabelPoint("A", 1, 1)
println(s"p1 到原点距离: ${p1.distanceToOrigin}")
println(s"origin 到原点距离: ${origin.distanceToOrigin}")
println(s"p1 到 p2 距离: ${p1.distanceTo(p2)}")
println(s"p1 所在象限: ${p1.quadrant}")
println(s"p3 所在象限: ${p3.quadrant}")
println(s"p2 所在象限: ${p2.quadrant}")
println(s"p1 == p2? ${p1 == p2}")
println(s"p1 == p4? ${p1 == p4}")
println(s"p1 == origin? ${p1 == origin}")
println(p1)
println(labelP)
}
}
}
