고구마 계산기 만들기!-(2. 계산기 구현하기)

두꺼비·2022년 1월 11일
2

고구마 계산기

목록 보기
2/3

오늘은 진짜 계산기가 구동할 수 있도록 JAVA 코딩을 해줄 거예요!

오늘도 힘차게 시작해봅시다~


2. 계산기 구현하기

for 문을 이용하여 버튼들을 선언해주었습니다. (CE, +/-, ., ← 버튼은 다음에 해보도록 해요!)

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

        textInput = findViewById(R.id.textInput);
        textOutput = findViewById(R.id.textOutput);

        for(int i=0; i<18; i++) {
            String buttonID = "button" + i;
            int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
            findViewById(resID).setOnClickListener(mClickListener);
        }
    }

태그를 활용하여 짧고 간단하게 선언해주었어요.


이제 mClickListener 함수를 작성해 볼 건데요,

Button.OnClickListener mClickListener = new View.OnClickListener() {
        public void onClick(View view) {
            Button button = (Button) view;
            String input = button.getText().toString();
            textOutput.setText("");

            if("+".equals(input)||"-".equals(input)||"*".equals(input)||"/".equals(input)||"=".equals(input)){
                if("".equals(firstValue)){
                    firstValue = textInput.getText().toString();
                    textInput.setText("");
                } else{
                    String secondValue = textInput.getText().toString();
                    result=0;
                    switch (operator) {
                        case "+" : result = Integer.valueOf(firstValue) + Integer.valueOf(secondValue); break;
                        case "-" : result = Integer.valueOf(firstValue) - Integer.valueOf(secondValue); break;
                        case "*" : result = Integer.valueOf(firstValue) * Integer.valueOf(secondValue); break;
                        case "/" : result = Integer.valueOf(firstValue) / Integer.valueOf(secondValue); break;
                    }
                    if("=".equals(input)){
                        textInput.setText("");
                        textOutput.setText(String.valueOf(result));
                        firstValue = "";
                        operator = "";
                        return;
                    }
                    textInput.setText(String.valueOf(result));
                    firstValue = String.valueOf(result);
                    init = true;
                }
                operator = input;
            } else if("C".equals(input)){
                textInput.setText("");
                textOutput.setText("");
                firstValue = "";
                operator = "";
            } else {
                if(init){
                    init = false;
                    textInput.setText(input);
                } else {
                    textInput.setText(textInput.getText().toString() + input);
                }
            }
        }
    };

계산기의 사칙연산기능과 C를 누르면 초기화되는 기능을 구현해주었어요.

input은 가장 최근에 입력된 값을 나타내고, operator는 가장 최근에 입력된 연산기호 값을 저장하고 있어요. 계산을 할 때 2항 계산을 하면 간단하게 끝나지만, 3항 이상 계산을 할 때를 위해, init를 이용하여 함수를 구현해주었어요.

2항 계산 시

textInput.setText(textInput.getText().toString() + input);숫자가 입력됩니다

  • 연산기호를 누르면 firtstValue가 비어있기에, firstValue에는 현재 입력된 값이 저장이 되고 textInput 뷰의 값들은 초기화가 됩니다
  • 연산기호는 operator에 저장됩니다
  • 또다시 숫자를 입력합니다
  • 연산기호 =를 누릅니다.
  • 입력된 숫자는 secondValue에 저장이 되고, operator에 저장된 기호에 따라 연산이 되어 result에 결과가 저장됩니다.
  • textInput은 초기화되고, textOutput에 result가 출력됩니다.
  • fistValue와 operator는 초기화되고 끝이 납니다.

2항 이상 계산 시

textInput.setText(textInput.getText().toString() + input);숫자가 입력됩니다

  • 연산기호를 누르면 firtstValue가 비어있기에, firstValue에는 현재 입력된 값이 저장이 되고 textInput 뷰의 값들은 초기화가 됩니다
  • 연산기호는 operator에 저장됩니다
  • 또다시 숫자를 입력합니다
  • 연산기호를 누릅니다.
  • 입력된 숫자는 secondValue에 저장이 되고, operator에 저장된 기호에 따라 연산이 되어 result에 결과가 저장됩니다
  • textInput에 result가 출력되고, firstValue에는 result 값이 저장되고, init는 true가 됩니다
  • 연산기호는 operator에 저장됩니다
  • 숫자를 입력할 때에는 init가 false가 되며, textInput.setText(input); textInput에는 input이 출력됩니다
  • 다음에 숫자를 또 입력할 시, textInput.setText(textInput.getText().toString() + input); 기존 적혀있던 숫자 뒤로 숫자가 입력됩니다
  • =기호가 입력될 때까지 반복합니다.





내일은 고구마 계산기 다운 기능을 만들어주도록 하겠습니다!

위 코드는 아래 블로그를 참고하여 만들어졌습니다!

https://forest71.tistory.com/159

profile
두꺼비는 두껍다

0개의 댓글