코틀린 실습(계산기)

suyeon lee·2021년 3월 31일

안드로이드

목록 보기
3/10

계산기 만들기

1.xml에서 화면 만들기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp"
    >

    <EditText
        android:id="@+id/Edit1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:hint="숫자1" />

    <EditText
        android:id="@+id/Edit2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:hint="숫자2"/>
    <Button
        android:id="@+id/BtnAdd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="더하기"
        />
    <Button
        android:id="@+id/BtnSub"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="빼기"/>

    <Button
        android:id="@+id/BtnMul"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="곱하기"/>
    <Button
        android:id="@+id/BtuDiv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="나누기"/>
    <Button
        android:id="@+id/Btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="나머지값"/>
    <TextView
        android:id="@+id/TextResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:textColor="#00ff00"
        android:textSize="30dp"

        />

</LinearLayout>

1단게 : 코틀린 객체생성
위치는 onCreate 메소드 밖에만들어도 안에만들어도됨 단,밖에 만들시 lateinit로 초기화는 나중에하겠다고 알려줘야함

package com.example.ex04_01

import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    //1.멤버변수
    //lateinit 초기화 나중에 하겠다
    lateinit var edit1: EditText
    lateinit var edit2: EditText
    lateinit var btnAdd: Button
    lateinit var btnSub: Button
    lateinit var btnMul: Button
    lateinit var btnDiv: Button
    lateinit var btn1: Button
    lateinit var textResult: TextView
    lateinit var num1: String
    lateinit var num2: String
    var result: Double? = null
     //3.메소드
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //지역변수 ->onCreate메소드의 지역변수
        //1단계 - 코틀린 객체 만들기
        //var edit1 : EditText

2단계 : xml객체를 코틀린 객체에 연결(바인딩)

 //2단계 - xml객체를 코틀린 객체에 연결(바인딩)
        edit1 = findViewById<EditText>(R.id.Edit1)
        edit2 = findViewById<EditText>(R.id.Edit2)
        btnAdd = findViewById(R.id.BtnAdd)
        btnSub = findViewById(R.id.BtnSub)
        btnMul = findViewById(R.id.BtnMul)
        btnDiv = findViewById(R.id.BtuDiv)
        btn1 = findViewById(R.id.Btn1)
        textResult = findViewById(R.id.TextResult)

3단계 작업 ->이벤트 처리

 //(edit)text -> String으로 변경 -> Int로 변경해서 계산 -> 계산후 String형으로 변경 후 출력해줌
 //text는 String으로만 형변환 가능
 
     btnAdd.setOnClickListener {
            num1 = edit1.text.toString()
            num2 = edit2.text.toString()
            if (num1.trim().equals("") || num2.trim().equals("")){
                Toast.makeText(this, "숫자입력 하세요", Toast.LENGTH_SHORT).show()
            }else {
                result = num1.toDouble() + num2.toDouble()
                textResult.text = "계산 결과 : " + result
                //.toString()사용안해도됨 why?? String+Int = String이되기 때문에
            }     
        }


      btnSub.setOnClickListener {
            num1 = edit1.text.toString()
            num2 = edit2.text.toString()
            if  (num1.trim().equals("") || num2.trim().equals("")){
                Toast.makeText(applicationContext, "숫자입력 하세요", Toast.LENGTH_SHORT).show()
            }else {
                result = num1.toDouble() - num2.toDouble()
                textResult.text = "계산 결과 : " + result.toString()
            }
        }


      btnMul.setOnClickListener {
            num1 = edit1.text.toString()
            num2 = edit2.text.toString()
            if (num1.trim().equals("") || num2.trim().equals("")){
                        Toast.makeText(applicationContext, "숫자입력 하세요", Toast.LENGTH_SHORT).show()
                    }
            else {
                result = num1.toDouble() * num2.toDouble()
                textResult.text = "계산 결과 : " + result.toString()
            }
            false
        }


      btnDiv.setOnClickListener {
            num1 = edit1.text.toString()
            num2 = edit2.text.toString()
            if(num1.trim().equals("") || num2.trim().equals("")){
                Toast.makeText(applicationContext, "숫자입력 하세요", Toast.LENGTH_SHORT).show()
            }
            else {
      //num값은 String 인데 계속 Int 0 이랑 비교해서 안된거였음
                if (num2=="0") {
                    Toast.makeText(applicationContext, "0입력", Toast.LENGTH_SHORT).show()
                }
                else {
                    result = num1.toDouble() / num2.toDouble()
                 //나누기 할때 소수점 두번째자리 까지만 표시
                 //ex) 123.45687913...일때 (123.456789..*100) 하면 12345.6132456..
                //(12345.6132456..).toInt()하면 소수점 없이 12345 만 출력됨
               //(12345)/100.0해주면 123.45
              //멤버변수에 result null 을 넣어서 !!를 사용하여 null이아닐때 사용하겠다고 해야함
                    result =(result!! *100).toInt()/100.0
                    textResult.text = "계산 결과 : " + result.toString()
                }
            }
        }

        btn1.setOnClickListener {
            num1 = edit1.text.toString()
            num2 = edit2.text.toString()
            if (num1.trim().equals("") || num2.trim().equals("")){
                Toast.makeText(applicationContext, "숫자입력 하세요", Toast.LENGTH_SHORT).show()
            }else {
                result = num1.toDouble() % num2.toDouble()
                textResult.text = "계산 결과 : " + result.toString()
            }
            false
        }

        }
    }

0개의 댓글