본문 바로가기

BackEnd/Android

간단한 계산기 구현하기

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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:inputType="numberDecimal" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et2"
        android:layout_margin="10dp"
        android:inputType="numberDecimal" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnAdd"
        android:text="더하기"
        android:layout_margin="10dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnSub"
        android:text="빼기"
        android:layout_margin="10dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnMul"
        android:text="곱하기"
        android:layout_margin="10dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnDiv"
        android:text="나누기"
        android:layout_margin="10dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnMod"
        android:text="나머지 몫"
        android:layout_margin="10dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/result"
        android:textSize="30sp"
        android:textColor="#FF0000"
        android:layout_margin="10dp"
        android:text="계산 결과 : " />

</LinearLayout>

 

 

Main Class

 

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText et1, et2;
    Button btnAdd, btnSub, btnMul, btnDiv, btnMod;
    TextView textResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et1 = findViewById(R.id.et1);
        et2 = findViewById(R.id.et2);
        btnAdd = findViewById(R.id.btnAdd);
        btnSub = findViewById(R.id.btnSub);
        btnMul = findViewById(R.id.btnMul);
        btnDiv = findViewById(R.id.btnDiv);
        btnMod = findViewById(R.id.btnMod);
        textResult = findViewById(R.id.result);

        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(et1.getText().toString().length() == 0) {
                    Toast.makeText(MainActivity.this, "첫번째 숫자 입력 필수!", Toast.LENGTH_SHORT).show();
                    et1.requestFocus();
                    return;
                } else if(et2.length() == 0) {
                    Toast.makeText(MainActivity.this, "두번째 숫자 입력 필수!", Toast.LENGTH_SHORT).show();
                    et2.requestFocus();
                    return;
                }

                double num1 = Double.parseDouble(et1.getText().toString());
                double num2 = Double.parseDouble(et2.getText().toString());
                double result = 0;

                switch(v.getId()) {
                    case R.id.btnAdd:
                        result = num1 + num2;
                        break;
                    case R.id.btnSub:
                        result = num1 - num2;
                        break;
                    case R.id.btnMul:
                        result = num1 * num2;
                        break;
                    case R.id.btnDiv:
                        if(num2 == 0) {
                            Toast.makeText(MainActivity.this, "두 번째 숫자에 0이 올 수 없습니다!", Toast.LENGTH_SHORT).show();
                            et2.requestFocus();
                            return;
                        }

                        result = num1 / num2;
                        break;
                    case R.id.btnMod:
                        if(num2 == 0) {
                            Toast.makeText(MainActivity.this, "두 번째 숫자에 0이 올 수 없습니다!", Toast.LENGTH_SHORT).show();
                            et2.requestFocus();
                            return;
                        }

                        result = num1 % num2;
                        break;
                }

                // 소수점 첫째 자리가 0일 경우
                if(result % 1 == 0) {
                    textResult.setText("계산 결과 : " + (int)result);
                } else {
                    textResult.setText("계산 결과 : " + result);
                }
            }
        };

        btnAdd.setOnClickListener(listener);
        btnSub.setOnClickListener(listener);
        btnMul.setOnClickListener(listener);
        btnDiv.setOnClickListener(listener);
        btnMod.setOnClickListener(listener);
    }
}

 

 

만약 Main Class의 id 구분을 if문으로 할 경우 아래의 코드처럼 작성합니다.

 

               if(v == btnAdd) {
                   result = num1 + num2;
               } else if(v == btnSub) {
                   result = num1 - num2;
               } else if(v == btnMul) {
                   result = num1 * num2;
               } else if(v == btnDiv) {
                   if(num2 == 0) {
                       Toast.makeText(MainActivity.this, "두 번째 숫자에 0이 올 수 없습니다!", Toast.LENGTH_SHORT).show();
                       edit2.requestFocus();
                       return;
                   }

                   result = num1 / num2;
               } else if(v == btnMod) {
                   if(num2 == 0) {
                       Toast.makeText(MainActivity.this, "두 번째 숫자에 0이 올 수 없습니다!", Toast.LENGTH_SHORT).show();
                       edit2.requestFocus();
                       return;
                   }

                   result = num1 % num2;
               }

 

일반적으로 if-else문보다 switch-case문이 연산 속도가 빠릅니다.