Chapter 5 - Section 3
import Operation.*
fun main(args: Array<String>) {
try {
val number1 = MathLib.getInput("Number 1: ")
val number2 = MathLib.getInput("Number 2: ")
print("Select an operation (${MathLib.OPERATIONS}): ")
val operation = readLine()
val result: Double? =
when (operation) {
ADD.operator -> MathLib.addValues(number1, number2)
SUBTRACT.operator -> MathLib.subtractValues(number1, number2)
MULTIPLY.operator -> MathLib.multiplyValues(number1, number2)
DIVIDE.operator -> MathLib.divideValues(number1, number2)
else -> throw Exception("Unknown operation")
}
println("The answer is $result")
} catch (e: NumberFormatException) {
println("${e.message} is not a number")
} catch (e: Exception) {
println(e.message)
}
}
enum class Operation(val operator: String) {
ADD("+"), SUBTRACT("-"), MULTIPLY("*"), DIVIDE("/")
}
class MathLib {
companion object {
// const val ADD = "+"
// const val SUBTRACT = "-"
// const val MULTIPLY = "*"
// const val DIVIDE = "/"
const val OPERATIONS = "+ - * /"
fun addValues(number1: Double, number2: Double) = number1 + number2
fun subtractValues(number1: Double, number2: Double) = number1 - number2
fun multiplyValues(number1: Double, number2: Double) = number1 * number2
fun divideValues(number1: Double, number2: Double) = number1 / number2
fun getInput(prompt: String): Double {
print(prompt)
val string: String? = readLine()
val number = string!!.toBigDecimal()
return number.toDouble()
}
}
}