App/Android Native

Practice - mini project w kotlin - Calculator

Agrafenaaa 2021. 9. 27. 17:30

Ref : https://www.youtube.com/watch?v=uRyvNKRkwbs&t=22211s 

 

주안점

1. CLR -> String("")

2. Operators -> value.contains

3. Split을 통해 앞뒤 숫자 나누기

4. 정수일 경우 소수점처리 없애기 -> substring을 통해 판단 후 각 결과값에 fun 입히기

5. lastNum, lastDot flag 이용

 

더보기

class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding

var lastNum : Boolean = false
var lastDot : Boolean = false

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}

fun onDigit(view: View){
binding.tvInput.append((view as Button).text)
lastNum = true

}

fun onClear(view: View){
binding.tvInput.text = ""
lastNum = false
lastDot = false
}

fun onDecimalPoint(view: View){
if(lastNum && !lastDot){
binding.tvInput.append(".")
lastNum = false
lastDot = true
}
}

fun onEqual(view: View){
if(lastNum){
var tvValue = binding.tvInput.text.toString()
var prefix = ""

try{
if(tvValue.startsWith("-")){
prefix = "-"
tvValue = tvValue.substring(1)
}

if(tvValue.contains("-")){
val spValue = tvValue.split("-")
var one = spValue[0]
var two = spValue[1]

if(!prefix.isEmpty()){
one = prefix + one
}

binding.tvInput.text = removeZeroAfterDot((one.toDouble() - two.toDouble()).toString())

}else if(tvValue.contains("+")){
val spValue = tvValue.split("+")
var one = spValue[0]
var two = spValue[1]

if(!prefix.isEmpty()){
one = prefix + one
}

binding.tvInput.text = removeZeroAfterDot((one.toDouble() + two.toDouble()).toString())

}else if(tvValue.contains("*")){
val spValue = tvValue.split("*")
var one = spValue[0]
var two = spValue[1]

if(!prefix.isEmpty()){
one = prefix + one
}

binding.tvInput.text = removeZeroAfterDot((one.toDouble() * two.toDouble()).toString())

}else if(tvValue.contains("/")){
val spValue = tvValue.split("/")
var one = spValue[0]
var two = spValue[1]

if(!prefix.isEmpty()){
one = prefix + one
}

binding.tvInput.text = removeZeroAfterDot((one.toDouble() / two.toDouble()).toString())
}
}catch(e: ArithmeticException){
e.printStackTrace()
}
}
}

fun onOperator(view: View){
if(lastNum && !isOperatorAdded(binding.tvInput.text.toString())){
binding.tvInput.append((view as Button).text)
lastNum = false
lastDot = false
}
}

private fun removeZeroAfterDot(result: String) : String{
var value = result
if(result.contains(".0"))
value = result.substring(0, result.length - 2)
return value
}

private fun isOperatorAdded(value: String) : Boolean {
return if(value.startsWith("-")){
false
}else{
value.contains("/") || value.contains("*")
|| value.contains("+") || value.contains("-")
}
}


}