본문 바로가기
개발적인/기타 개발적인 부분

[개발공부] 안드로이드 스튜디오 간단 계산기 구현하기

by klm hyeon woo 2021. 9. 26.

 

 

ㄱ,, 그러면 안드로이드 스튜디오 비기너의 여행기 출발,,

일단 계산기에는 사칙연산이 들어가야하니까, 사칙연산을 간단하게 구현을 해주었다-!

거기에다가, 나눗셈의 몫을 구했으면 심심치않게 나눗셈의 나머지 값도 나오도록 사칙연산에 버튼 하나를 추가해주었다.

아래에는 간단한 코드 예제만 들어간다, 내가 보완하고자 하는 부분은 계속해서 추가가 될 수 있으니 미리 긴 분량에 대해 사과를,, ✌🏻

 

 

 

 

//

 

기본적인 MainActivity.java 관련 코드

 

//

package com.example.calc;

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 {

    Button button1,button2,button3,button4,button5;
    EditText text1, text2;
    TextView text3;

    String num1, num2;
    int result;

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


        button1 = (Button) findViewById(R.id.btn1);
        button2 = (Button) findViewById(R.id.btn2);
        button3 = (Button) findViewById(R.id.btn3);
        button4 = (Button) findViewById(R.id.btn4);
        button5 = (Button) findViewById(R.id.btn5);

        text1 = (EditText) findViewById(R.id.text1);
        text2 = (EditText) findViewById(R.id.text2);
        text3 = (TextView) findViewById(R.id.text3);

            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    num1 = text1.getText().toString();
                    num2 = text2.getText().toString();
                    if (num2.equals("") || num1.equals("")) {
                        Toast.makeText(getApplicationContext(),"숫자를 입력하세요", Toast.LENGTH_SHORT).show();
                    }
                    else {
                        result = Integer.parseInt(num1) + Integer.parseInt(num2);
                        text3.setText("계산결과 : " + result);
                    }
                }
            });

            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    num1 = text1.getText().toString();
                    num2 = text2.getText().toString();
                    if (num2.equals("") || num1.equals("")) {
                        Toast.makeText(getApplicationContext(),"숫자를 입력하세요", Toast.LENGTH_SHORT).show();
                    }
                    else {
                        result = Integer.parseInt(num1) - Integer.parseInt(num2);
                        text3.setText("계산결과 : " + result);
                    }
                }
            });

            button3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    num1 = text1.getText().toString();
                    num2 = text2.getText().toString();
                    if (num2.equals("") || num1.equals("")) {
                        Toast.makeText(getApplicationContext(),"숫자를 입력하세요", Toast.LENGTH_SHORT).show();
                    }
                    else {
                        result = Integer.parseInt(num1) * Integer.parseInt(num2);
                        text3.setText("계산결과 : " + result);
                    }
                }
            });

            button4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    num1 = text1.getText().toString();
                    num2 = text2.getText().toString();
                    if (num2.equals("") || num1.equals("")) {
                        Toast.makeText(getApplicationContext(),"숫자를 입력하세요", Toast.LENGTH_SHORT).show();
                    }
                    else {
                        result = Integer.parseInt(num1) / Integer.parseInt(num2);
                        text3.setText("계산결과 : " + result);
                    }
                }
            });

            button5.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    num1 = text1.getText().toString();
                    num2 = text2.getText().toString();
                    if (num2.equals("") || num1.equals("")) {
                        Toast.makeText(getApplicationContext(),"숫자를 입력하세요", Toast.LENGTH_SHORT).show();
                    }
                    else {
                        result = Integer.parseInt(num1) % Integer.parseInt(num2);
                        text3.setText("계산결과 : " + result);
                    }
                }
            });

    }
}

//

 

기본적인 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"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:layout_margin="30px">


    <EditText
        android:layout_marginTop="20px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text1"
        android:hint="@string/text1"
        />

    <EditText
        android:layout_marginTop="20px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text2"
        android:hint="@string/text2"
        />

    <Button
        android:layout_marginTop="40px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn1"
        android:text="@string/btn1"
        />
    <Button
        android:layout_marginTop="40px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn2"
        android:text="@string/btn2"
        />
    <Button
        android:layout_marginTop="40px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn3"
        android:text="@string/btn3"
        />
    <Button
        android:layout_marginTop="40px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn4"
        android:text="@string/btn4"
        />
    <Button
        android:layout_marginTop="40px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn5"
        android:text="@string/btn5"
        />

    <TextView
        android:layout_marginTop="30px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:text="@string/text3"
        android:textSize="60px"
        android:id="@+id/text3"
        />


</LinearLayout>

 

 

근데,, 반복되는 부분이 조금은 많아서 코드가 비효율적이다, 그리고 만약에 상황에 영어나 한글이 입력되었을 때

자동종료되는 이슈가 있는데 이것을 코드를 줄이면서 해결을 해줄 생각이다.

바로, 자바 try-catch 문을 이용하여서 이 오류를 잡아줄 생각이다.

(사용자는 오류를 범했을 때, 다음 과정으로 넘어가지 못하고 오류메세지를 받아 정확한 입력을 하게 된다)

 

반복되는 부분들은 메인 단에 상속을 받게하여 반복되는 부분들을 최소화 시켜주었다.

 

 

 

 

//

 

수정된 MainActivity.java 관련 코드

 

//

 

 

package com.example.calc;

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;

import java.lang.reflect.Type;
import java.net.Proxy;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button button1, button2, button3, button4, button5;
    EditText text1, text2;
    TextView text3;

    String num1, num2;
    int result;

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

        text1 = (EditText) findViewById(R.id.text1);
        text2 = (EditText) findViewById(R.id.text2);
        text3 = (TextView) findViewById(R.id.text3);

        button1 = (Button) findViewById(R.id.btn1);
        button2 = (Button) findViewById(R.id.btn2);
        button3 = (Button) findViewById(R.id.btn3);
        button4 = (Button) findViewById(R.id.btn4);
        button5 = (Button) findViewById(R.id.btn5);



        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
        button5.setOnClickListener(this);

    }


    @Override
    public void onClick(View view) {

        num1 = text1.getText().toString();
        num2 = text2.getText().toString();

        int x, y;

        try {
            if (num1.equals("") || num2.equals("")) {
                Toast.makeText(getApplicationContext(), "숫자를 입력해주세요!", Toast.LENGTH_SHORT).show();
            } else {
                x = Integer.parseInt(num1);
                y = Integer.parseInt(num2);

                switch (view.getId()) {
                    case R.id.btn1:
                        result = x + y;
                        break;
                    case R.id.btn2:
                        result = x - y;
                        break;
                    case R.id.btn3:
                        result = x * y;
                        break;
                    case R.id.btn4:
                        result = x / y;
                        break;
                    case R.id.btn5:
                        result = x % y;
                        break;
                }
                text3.setText("계산결과 : " + result);
            }
        }
        catch (Exception e) {
            Toast.makeText(getApplicationContext(), "숫자를 입력해주세요!", Toast.LENGTH_SHORT).show();
        }
    }



}

 

처음에 파이썬에서 잘만먹던 예외 처리문이 잘 안 먹어서 버벅되었지만, 내가 블럭을 잘못 인지해서 잘못 친 것 같기도 하고,,

다시 예외처리문을 블럭에 맞게 넣으니까 잘 동작한다. 파이썬만큼 자바도 너무 재밌댜

안드로이드 스튜디오 공부가 끝나면 스위프트도 한번 도전해보는 시간을 가지며,,

다음시간에는 C언어 전공책을 다시 한번 복습을 하는 시간을 가지고 한달 포스팅을 시작해보려고 한다-

오늘도 알찬 하루는 끝-!

'개발적인 > 기타 개발적인 부분' 카테고리의 다른 글

IX. 소프트웨어 개발 보안 구축  (0) 2022.10.09
VIII. 서버 프로그램 구현  (2) 2022.10.08
VII. SQL 응용  (0) 2022.10.06
V. 인터페이스  (0) 2022.10.03
IV. 통합 구현  (0) 2022.10.01

댓글