키워드 : pow, binding, if(예외처리)

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="40dp" //화면의 상하좌우 마진 40dp
    android:orientation="vertical" //화면의 구성은 수직
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="신장"
        android:textSize="20sp"
        android:textStyle="bold"/>
        //진하게

    <EditText
        android:id="@+id/cm" //.kt에서 사용할 ID
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:hint="신장 입력"
        android:inputType="number" />
        //숫자만 입력가능

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="40dp"
        android:layout_marginRight="40dp"
        android:text="몸무게"
        android:textSize="20sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/kg"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:hint="몸무게 입력"
        android:inputType="number" />

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="30dp"
        android:layout_marginRight="40dp"
        android:text="결과 확인" />

    //결과 값을 출력해줄 TextView
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">

        <TextView
            android:id="@+id/textBMI"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            tools:text="BMI : " />
            //사용자에게 보여지지 않으며 개발자에게만 예시로 보임

        <TextView
            android:id="@+id/result1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            tools:text="30" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            tools:text="결과 : " />

        <TextView
            android:id="@+id/result2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            tools:text="정상" />
    </LinearLayout>

</LinearLayout>

MainActivity.kt

package com.example.bmi

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.bmi.databinding.ActivityMainBinding
import kotlin.math.pow
import kotlin.math.roundToInt


class MainActivity : AppCompatActivity() {
    //binding 변수 생성
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //inflate 메소드가 액티비티에서 사용할 바인딩 클래스의 인스턴스 생성
        //inflate 메소드 호출 하면 사용할 인스턴스가 생성
        binding = ActivityMainBinding.inflate(layoutInflater)

        //최상단인 root와 연결하여 출력
        setContentView(binding.root)

        //ID : btn(버튼)을 클릭 했을 시
        binding.btn.setOnClickListener {
               //.xml에서 지정한 cm, kg의 값이 입력되지 않았을 시 예외처리
            if (binding.cm.text.isEmpty() || binding.kg.text.isEmpty()) {
                Toast.makeText(this, "값을 입력", Toast.LENGTH_SHORT).show()

                //결과 값들이 사라지며 누르기 전 상태로 돌아감
                binding.textBMI.text = ""
                binding.result1.text = ""
                binding.result2.text = ""
                return@setOnClickListener
            }
            
           //bmi 연산을 위해 ID cm, kg를 weight, height에 값을 넘겨 줌
            val weight: Int = binding.cm.text.toString().toInt()
            val height: Int = binding.kg.text.toString().toInt()

            //내장함수 제곱근(pow)을 이용한 연산
            val bmi = height / (weight / 100.0).pow(2.0)

            val resultText = when {
                bmi >= 35.0 -> "결과 : 3단계 비만"
                bmi >= 30.0 -> "결과 : 2단계 비만"
                bmi >= 25.0 -> "결과 : 1단계 비만"
                bmi >= 23.0 -> "결과 : 비만 전 단계"
                bmi >= 22.9 -> "결과 : 정상체중"
                else -> "결과 : 저체중"
            }
            binding.textBMI.text = "BMI : "
            binding.result1.text = bmi.roundToInt().toString() //반올림
            binding.result2.text = resultText //when 값 출력
        }
    }
}

 

 

 

 

복사했습니다!