Skip to content

Instantly share code, notes, and snippets.

@gab-stargazer
Created September 22, 2023 12:47
Show Gist options
  • Save gab-stargazer/502c8384a6aa8ebc4131cead3163fc98 to your computer and use it in GitHub Desktop.
Save gab-stargazer/502c8384a6aa8ebc4131cead3163fc98 to your computer and use it in GitHub Desktop.
Basic Calculator
fun main(args: Array<String>) {
println("Basic Calculator")
val firstNumber: Number?
val secondNumber: Number?
val operation: String?
while (true) {
print("Input first Number: ")
val input = readln()
if (input.isBlank()) continue
firstNumber = input.toIntOrNull() ?: input.toDoubleOrNull() ?: continue
break
}
while (true) {
print("Input second Number: ")
val input = readln()
if (input.isBlank()) continue
secondNumber = input.toIntOrNull() ?: input.toDoubleOrNull() ?: continue
break
}
while (true) {
print("Input operation: ")
val input = readln()
if (input == "*" || input == "+" || input == "-" || input == "/") {
operation = input
break
}
}
when (operation) {
"*" -> when {
firstNumber is Double && secondNumber is Double -> {
printResult(firstNumber * secondNumber)
}
firstNumber is Double -> {
printResult(firstNumber * secondNumber as Int)
}
secondNumber is Double -> {
printResult(firstNumber as Int * secondNumber)
}
else -> {
printResult(firstNumber as Int * secondNumber as Int)
}
}
"+" -> when {
firstNumber is Double && secondNumber is Double -> {
printResult(firstNumber + secondNumber)
}
firstNumber is Double -> {
printResult(firstNumber + secondNumber as Int)
}
secondNumber is Double -> {
printResult(firstNumber as Int + secondNumber)
}
else -> {
printResult(firstNumber as Int + secondNumber as Int)
}
}
"-" -> when {
firstNumber is Double && secondNumber is Double -> {
printResult(firstNumber - secondNumber)
}
firstNumber is Double -> {
printResult(firstNumber - secondNumber as Int)
}
secondNumber is Double -> {
printResult(firstNumber as Int - secondNumber)
}
else -> {
printResult(firstNumber as Int - secondNumber as Int)
}
}
"/" -> when {
firstNumber is Double && secondNumber is Double -> {
printResult(firstNumber / secondNumber)
}
firstNumber is Double -> {
printResult(firstNumber / secondNumber as Int)
}
secondNumber is Double -> {
printResult(firstNumber as Int / secondNumber)
}
else -> {
printResult(firstNumber as Int / secondNumber as Int)
}
}
else -> throw Exception("Something went wrong")
}
}
fun printResult(result: Number) {
println("Result is $result")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment