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

2 Answers

0 votes
fun main() {
    val radius = 3.0
    val PI = 3.14

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

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

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



/*
run:

Area = 28.26
Diameter = 6.00
Circumference = 18.84

*/

 



answered Oct 18, 2024 by avibootz
0 votes
import kotlin.math.PI

/**
 * Data class to hold the calculated geometric metrics of a circle.
 */
data class CircleMetrics(
    val diameter: Double,
    val circumference: Double,
    val 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.
 */
fun calculateCircleMetrics(radius: Double): CircleMetrics {
    // Guard clause: radius cannot be negative using Kotlin's built-in require() function
    require(radius >= 0.0) { "Radius cannot be negative." }

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

    return CircleMetrics(diameter, circumference, area)
}

fun main() {
    try {
        val radius = 3.0
        
        // Retrieve calculated metrics
        val metrics = calculateCircleMetrics(radius)

        // Output results formatted to 2 decimal places
        println("Radius: $radius")
        println("Diameter: ${metrics.diameter}")
        println("Circumference: ${"%.2f".format(metrics.circumference)}")
        println("Area: ${"%.2f".format(metrics.area)}")
    } 
    catch (e: IllegalArgumentException) {
        println("Error: ${e.message}")
    }
}


/*
run:

Radius: 3.0
Diameter: 6.0
Circumference: 18.85
Area: 28.27

*/

 



answered 3 hours ago by avibootz

Related questions

...