TIL

계산기 만들기

류정근 2024. 4. 26. 16:19
계산기를 프로그래밍 해보자

 

우선 과정을 거치때 마다 commit을 해주기 위해 인텔리제이와 깃허브를 연동해보자.

 

 

세팅에서 깃허브를 찾아준뒤 연동한다. 

연동은 성공했지만 작은 문제가 생겼다.

문제점

깃허브의 default 는메인에 연결되어 있는데 나의 깃은 master 브런치에 연결되어 있어 커밋&푸쉬를 할때마다 브런치가 계속 생성되고 있다는 점, git checkout main 을 해도 main에 접근하지 못한 다는 점

 

해결법

우선 해결을 하기 위해선 원인을 알아야 하기에 튜터님에게 질문을 해 보았다. 튜터님께서 왜 문제가 생긴지 이유를 설명해 주셨다.  이유: 지금 main으로 접근하지 못하는 이유가 깃허브에서는 main이라는 이름의 브렌치에 git init이 되어있고, 나는 master란 이름의 브런치에 init이 되어있어서 쉽게 설명하면 뿌리가 다르다는 것!! 

해결법에는 두가지가 있었다. 검색을 해서 방법을 알아내어 main 브렌치에 바로 접근을 하거나, default를 내가 접근하고 있는 master로 바꾸는 것.

나는 미리 깃허를 연동을하고 계산기를 프로그래밍 할거기 때문에 아직 main에 작성한 것이 없다. 그래서 github settings 에서 Default 브런치를 master로 변경함 으로써 문제를 해결하였다.

튜터님이 말씀하신 것을 바탕으로 이해하고 내가 이해한 것이 맞는지 여쭤보러갔다가 깃이 탄생하게 된 과정 깃이 없었을 때 협업을 하는 과정 부터 매우 상세한 설명을 들을 수 있었다.(박성원 튜터님, 김순철 튜터님 감사합니다 ㅠㅠ)

간략하게 정리를 해보면 깃이 없었을 때는 로컬브런치란 개념이 없어서 commit을 한다는 것은 서버에 코드를 직접 수정하게 되는 것이고 그렇기 때문에 서버에 있는 코드를 누군가 수정중에는 다른 사람이 코밋을 할 수 없도록 락이 걸렸어다.

이 문제를 해결하기 위해 깃이 등장했고 직접 서버를 만드는 것이 가능은 하지만 불편하기 때문에 깃허브라는 서비스를 통해 서버를 대신 만들어 관리해 준다는 내용이였다. 지금까지 내가 깃허브를 사용하기 어려웠던 점이 깃과 깃허브 그리고 로컬과 서버를 구분하지 못하기 때문이 가장 큰 이유였던거 같다. 

내가 커밋을 한다는 것은 나의 로컬에 기록을 남기는 것이고 푸쉬를 할 때 서버에 직접 나의 코드를 전달하게된다.

그렇기 때문에 인터넷이 없어도 로컬에 저장이 가능하고 여러사람이 동시에 서버에 푸쉬를 할 수 있다.

대신 깃허브 서버에 있는 파일과 나의 파일이 싱크를 맞추어 주어야 하는데 이것이 풀을받고 머지가 잘 되어야 하는 이유이다. 아직 나의 수준으로는 이정도로 이해하는게 다 였지만 깃과 깃허브 로컬과 서버를 구분해서 이해하는 것이 매우 유익하였다. 그리고 시간이 된다면 git-flow 라는 알아보라는 조언을 받았다.

 

이제 깃허브는 어느정도 정리를 하였고, 본격적으로 계산기를 프로그래밍 해 보겠다.

 

import java.util.ArrayList;
import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //배열 생성
        ArrayList<Integer> arr = new ArrayList<Integer>();
        //count(결과값의 개수) 변수 생성
        int count = 0;

        // 반복문 사용
        while (true) {
            System.out.print("첫 번째 숫자를 입력하세요 :");
        int num1 = sc.nextInt();
        System.out.print("두 번째 숫자를 입력하세요: ");
        int num2 = sc.nextInt();

        System.out.print("사칙연산 기호를 입력하세요: ");
        char sachic = sc.next().charAt(0);


        int result = 0;

        switch (sachic) {
            case '+':
                result = num1 + num2;
                break;

            case '-':
                result = num1 - num2;
                break;

            case '*':
                result = num1 * num2;
                break;

            case '/':
                //분모가 0이면 안됨
                if (num2 == 0) {
                    System.out.println("분모는 0이 될 수 없습니다.");
                    break;
                }
                 result = num1 / num2;
                break;

            default:
                System.out.println("알맞은 사칙연산이 아닙니다");
                 break;//count가 올라가지 않도록 break 해준다
        }

        System.out.println("결과: " + result );

            System.out.print("더 계산하시겠습니까? (exit 입력 시 종료)");
            String repeat = sc.next();


            arr.add(result);
            count++;
            // exit 를 입력받으면 반복 종료
            if (repeat.equals("exit")) {
                break;
            }

            // 배열이 10개 가 넘으면 가장 먼저 저장된 값을 새로운 연산 결과로 바꿈
            // 총 숫자 > 10 이면, set(count % 10 , result) 로 변겅, 이렇게하면 20이 넘어가도 값을 저장 가능

        }
        System.out.println("계산을 종료합니다");
    }
}

 

우선 쉬웠던 부분까지는 금방 만들었고 여기서 고민해 봐야할 부분이 배열에 하나씩 추가하고 10개가 넘어가면 앞에 입력받았던 배열에서 값을 하나씩 수정하는 것!!

// 배열이 10개 가 넘으면 가장 먼저 저장된 값을 새로운 연산 결과로 바꿈
// 총 숫자 > 10 이면, set(count % 10 , result) 로 변겅, 이렇게하면 20이 넘어가도 값을 저장 가능

 

내가 생각한 방법은 이랬다. if문을 써서 10개가 넘어가면 set을 통해 바꾸는 방법을 사용 하기로 했다.

if (arr.size() > 10) {
    arr.set(count % 10, result);
} else {
    arr.add(result);
} 

count++;

그렇게 작성한 코드^^ 아직 잘 되는지 확인은 안해봤는데 아직은 문제점을 못찾겠다.

 

 

바로 문제 점 발생 10개가 아닌 11개 부터 나오고, 0번째가 아닌 1번째부터 수정이 되기 시작했다.

해결법: 10 % 10  = 0 이라 생각을 해서 count가 10이 되는 순간 set(0,result)를 할 수있다고 생각을 했는데.......

arr.size가 10이상 >= 이부분이 문제인것 같다. 역시 그부분 고치니 잘된다. 

앞으로 고칠점: 분모에 0을 입력받으면 다시 입력하라고 하기, 사칙연산을 다른걸 입력하면 다시 입력하라고 하기

 

아앗 문제를 잘못봤다. 첫번째 배열을 결과값으로 바꾸란것이 아닌 첫번째 값을 삭제하고 마지막값을 마지막에 추가하란 것 이었다. ㅠㅠㅠㅠ 그래도,,, 다 했으니 금방 수정 할 수있지

if (arr.size() >= 10) {
    arr.remove(count  % 10);
    arr.add(result);
} else {
    arr.add(result);
}

easy~

 

여기서 한단계 발전한 기능을 만드는 다음과제는 다음편으로 올려야겠다~

 

'TIL' 카테고리의 다른 글

추상클래스  (0) 2024.04.27
상속 정복하기  (0) 2024.04.27
TIL(4)  (4) 2024.04.24
Til(3)  (4) 2024.04.23
TIL(2)  (0) 2024.04.22