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 & (다형성의 원리) 등을 활용
클래스 포함 이용하여 다시 만들어보기.
클래스 상속 이용하는 것 다시 만져보기.
@@아쉬웠던점.
클래스 상속,포함 등 클래스 간의 기능들을 이용하는 것에 많은 부족함을 느꼈다.
시간이 충분없어 강의도 제대로 듣지 못하였다.
강의를 마저 듣고 다시 처음부터 꼼꼼히 복습해서 주말까지 다시 만들어보기.
'프로젝트' 카테고리의 다른 글
팀프로젝트 Try 해볼것!(트러블슈팅, 플로우차트) (0) | 2024.08.08 |
---|---|
수강생의 과목별 회차 점수 수정.(final) (0) | 2024.08.07 |
수강생의 과목별 회차 점수 수정 pt3. (예외 잡기) (0) | 2024.08.06 |
수강생의 과목별 회차 점수 수정.(pt2) (0) | 2024.08.06 |
수강생의 과목별 회차 점수 수정. (0) | 2024.08.02 |