본문 바로가기
프로젝트

계산기

by wjdtmdgjs 2024. 7. 30.
package calculator;

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

public class App {
    public static void main(String[] args) {

        ArithmeticCalculator cal = new ArithmeticCalculator(new ArrayList<>()); // 생성자를 이용해  초기화
        CircleCalculator cal2 = new CircleCalculator(new ArrayList<>()); // 생성자를 이용해  초기화


        Scanner sc = new Scanner(System.in);


        while (true) {
            System.out.println("선택 (원의넓이 : O, 사칙연산 : x)"); // 원의 넒이 구할지 사칙연산할지 고르기.
            char pick = sc.next().charAt(0);
            if (pick == 'O'){
                System.out.println("원의 반지름을 입력하세요");
                int rad = sc.nextInt();
                double result=0;
                result = cal2.calculateCircleArea(rad);
                cal2.getArray().add(result); //결과값 저장
                System.out.println("원의 넓이 =" + result);
                cal2.inquiryResults(); // 저장된 넓이값들 바로 출력

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

                    if (text.equals("exit")){ // exit 치면 빠져나가고 아님 계속 무한 계산하게
                        break;
                    }

            }else if(pick == 'X'){
            System.out.print("첫 번째 숫자를 입력하세요: ");
            // Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
            int num1 = sc.nextInt();
            System.out.print("두 번째 숫자를 입력하세요: ");
            // Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
            int num2 = sc.nextInt();

            System.out.print("사칙연산 기호를 입력하세요: "); // +, -, *, /
            char operator = sc.next().charAt(0); // charAt(0) : 입력받는값을 char로 변환해준다.
            //원래 scanner는 String으로 받아줘야된다.
            // charAt('인덱스값')

            double result =0; // double로 변경해준다.


            result = cal.calculate(num1, num2, operator);

            cal.getArray().add(result); /* getter로 받아주기. setter로 받을 수 있으나 지금 배열 전체를 바꾸는것이 아니라
            하나를 추가하거나 제거하는 것이기 때문에 getter 로 받아서 하는것. setter로 받을 경우 4번째 값을 넣어줄때 앞에 3개의
            값들을 모두 넣어 새로운 배열을 만들어야 되기에 이경우 getter로 사용한다.*/

            System.out.println(num1 + " " + operator + " " + num2 + " = " + result);


            System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까?(remove 입력)");
            sc.nextLine();
            String text2 = sc.nextLine();
            if(text2.equals("remove")) {// method 사용할 수 있게 바꿔줌
                cal.removeResult();
            }

            System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
            //sc.nextLine();
            String text3 = sc.nextLine();
            if(text3.equals("inquiry")){// method 사용할 수 있게 바꿔줌
               cal.inquiryResults();
            }

            System.out.println("");

            System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
            //sc.nextLine(); // 자꾸 넘어가서 개행문자를 받아줌
            String text = sc.nextLine();

            if (text.equals("exit")){ // exit 치면 빠져나가고 아님 계속 무한 계산하게
                break;
            }
            }else{
                System.out.println("다시 입력해주세요");

            }

        }


    }
}

 

package calculator;

import java.util.ArrayList;

public class Calculator {

    static final double PI = 3.141592; // PI값은 변하지않으니 static final 사용
    private ArrayList<Double> array;// private을 써서 외부에서 접근못하게


    public Calculator(ArrayList<Double> array){
        this.array = array;
    }

    public double calculateCircleArea(int r1){
        double result=0;
        result = r1*r1*PI;
        return  result;
    }
    AddOperator add = new AddOperator();
    SubtractOperator sub = new SubtractOperator();
    MultiplyOperator mul = new MultiplyOperator();
    DivideOperator div = new DivideOperator();
    ModOperator mod = new ModOperator();
    public double calculate(int n1, int n2, char op){

       double result = 0;

        if (op == '+') {
            result = (double)add.operate(n1,n2);

        } else if (op == '-') {
            result = (double)sub.operate(n1,n2);

        } else if (op == '*') {
            result = (double)mul.operate(n1,n2);

        } else if (op == '/') {
            if (n2 == 0) {
                System.out.println("0으로 나눌수 없습니다.");
            } else {
                result = (double)div.operate(n1,n2);
                System.out.println("나머지는 " + mod.operate(n1,n2) + "입니다.");

            }
        }else{
            System.out.println("매개변수를 잘못 입력하였습니다.");
        }
        return result;
    }

    public ArrayList<Double> getArray(){ // getter 설정
        return array;
    }

    public void setArray(ArrayList<Double> array){ //setter 설정
        this.array=array;
    }

    public void removeResult(){ // 가장 먼저 저장된 데이터를 삭제하는 기능을 가진 메서드 구현
        array.remove(0);
    }

    public void inquiryResults(){
        System.out.print("[");
        for (double i : array) {
            System.out.print(i+" ");
        }
        System.out.print("]");
    }
}






 

package calculator;

public class SubtractOperator {
    public int operate(int n1, int n2) {
        int result =0;
        result = n1-n2;
        return result;
    }
}
package calculator;

import java.util.ArrayList;

public class AddOperator {

    public int operate(int n1, int n2) {

        int result =0;
        result = n1+n2;
        return result;
 }
}
package calculator;

public class MultiplyOperator {
    public int operate(int n1, int n2) {
        int result =0;
        result = n1*n2;
        return result;
    }
}
package calculator;

public class DivideOperator {
    public int operate(int n1, int n2) {
        int result =0;
        result = n1/n2;
        return result;
    }
}
package calculator;

public class ModOperator {
    public double operate(int n1, int n2) {
        double result =0;
        result = n1%n2;
        return result;
    }
}
package calculator;

import java.util.ArrayList;

public class ArithmeticCalculator extends Calculator{


     public ArithmeticCalculator (ArrayList<Double> array) {
         super(array);

     }
 }

package calculator;

import java.util.ArrayList;

public class CircleCalculator extends Calculator {

    public CircleCalculator(ArrayList<Double> array) {
        super(array);
    }
}

이번주 프로젝트 오늘까지 한 코드.

 

@@다음에 해볼일

Interface & (다형성의 원리) 등을 활용

클래스 포함 이용하여 다시 만들어보기.

클래스 상속 이용하는 것 다시 만져보기.

 

@@아쉬웠던점.

클래스 상속,포함 등 클래스 간의 기능들을 이용하는 것에 많은 부족함을 느꼈다.

시간이 충분없어 강의도 제대로 듣지 못하였다.

강의를 마저 듣고 다시 처음부터 꼼꼼히 복습해서 주말까지 다시 만들어보기.