How to calculate the area, diameter, and circumference of a circle in Scala

2 Answers

0 votes
object CircleCalculations extends App {
  val radius = 3
  val PI = Math.PI

  val area = PI * radius * radius
  println(f"Area = $area%.2f")

  val diameter = 2 * radius
  println(f"Diameter = $diameter%.2f")

  val circumference = 2 * PI * radius
  println(f"Circumference = $circumference%.2f")
}



/*
run:
    
Area = 28.27
Diameter = 6.00
Circumference = 18.85
    
*/

 



answered Aug 29, 2024 by avibootz
0 votes
object CircleCalculator {

  /**
   * Case class to hold the calculated geometric metrics of a circle immutably.
   */
  case class CircleMetrics(
    diameter: Double,
    circumference: Double,
    area: Double
  )

  /**
   * Calculates the diameter, circumference, and area of a circle.
   *
   * @param radius The radius of the circle (must be non-negative).
   * @return A CircleMetrics instance containing the calculated results.
   * @throws IllegalArgumentException if the radius is negative.
   */
  def calculateCircleMetrics(radius: Double): CircleMetrics = {
    // Guard clause: radius cannot be negative using Scala's built-in require() function
    require(radius >= 0.0, "Radius cannot be negative.")

    val diameter = 2.0 * radius
    val circumference = 2.0 * math.Pi * radius
    
    // Standard multiplication (radius * radius) is more efficient than math.pow(radius, 2)
    val area = math.Pi * (radius * radius)

    CircleMetrics(diameter, circumference, area)
  }

  def main(args: Array[String]): Unit = {
    try {
      val radius = 3.0
      
      // Retrieve calculated metrics
      val metrics = calculateCircleMetrics(radius)

      // Output results formatted to 2 decimal places using string interpolation (f-interpolator)
      println(f"Radius: $radius%.2f")
      println(f"Diameter: ${metrics.diameter}%.2f")
      println(f"Circumference: ${metrics.circumference}%.2f")
      println(f"Area: ${metrics.area}%.2f")
    } 
    catch {
      case e: IllegalArgumentException =>
        println(s"Error: ${e.getMessage}")
    }
  }
}


/*
run:

Radius: 3.00
Diameter: 6.00
Circumference: 18.85
Area: 28.27

*/

 



answered 2 hours ago by avibootz

Related questions

...