Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- ERD 작성
- jpa회원가입
- 최종 프로젝트
- 복합키
- 스프링부트오류
- queryDSL
- 빈생성안됨
- JoinColumn
- JPA주의사항
- 스프링 부트 기능
- Filter
- @IdClass
- JPA
- REST란
- json gson 차이
- Q 클래스
- Unsatisfied dependency
- Spring Spring boot 차이
- 1차캐시
- 스프링 부트 공식 문서
- REST API 규칙
- uncheck Exception
- Error creating bean with name
- git
- github
- 인텔리제이
- json
- jwt메서드
- jpa에러
- spring서버
Archives
- Today
- Total
Everyday Dev System
4주차 과제 : 계산기 예외 처리 본문
File Share : (아래 링크에서 다운로드 가능합니다)
공유 링크 : https://drive.google.com/file/d/1sdRS0nMQtI_LzoAD99FFHptmGBRKzbNv/view?usp=sharing
exceptSample.zip
drive.google.com
1. AbstractOperation.java
2. AddOperation.java
3. DivideOperation.java
4. ModOperation.java
5. MultiplyOperation.java
6. SubstractOperation.java
7. BadInputException.java
8. Calculator.java
9. CalculatorApp.java
10. Parser.java
11. Main.java
1. AbstractOperation.java
package org.example.week4.exceptSample;
public abstract class AbstractOperation {
abstract double operate(int firstNumber, int secondNumber);
}
2. AddOperation.java
package org.example.week4.exceptSample;
public class AddOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
}
3. DivideOperation.java
package org.example.week4.exceptSample;
public class DivideOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber/secondNumber;
}
}
4. ModOperation.java
package org.example.week4.exceptSample;
public class ModOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber%secondNumber;
}
}
5. MultiplyOperation.java
package org.example.week4.exceptSample;
public class MultiplyOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber * secondNumber;
}
}
6. SubstractOperation.java
package org.example.week4.exceptSample;
public class SubstractOperation extends AbstractOperation {
@Override
public double operate(int firstNumber, int secondNumber) {
return firstNumber-secondNumber;
}
}
7. BadInputException.java
package org.example.week4.exceptSample;
public class BadInputException extends Exception{
public BadInputException(String type) {
super("잘못된 입력입니다. " + type + "을 입력해주세요.");
}
}
8. Calculator.java
package org.example.week4.exceptSample;
public class Calculator {
private int firstNumber;
private int secondNumber;
private AbstractOperation operation;
public Calculator(AbstractOperation operation) {
this.operation = operation;
}
public Calculator() {
}
public void setOperation(AbstractOperation operation) {
this.operation = operation;
}
public void setFirstNumber(int firstNumber) {
this.firstNumber = firstNumber;
}
public void setSecondNumber(int secondNumber) {
this.secondNumber = secondNumber;
}
public int getFirstNumber() {
return firstNumber;
}
public int getSecondNumber() {
return secondNumber;
}
public AbstractOperation getOperation() {
return operation;
}
public double calculate() {
double answer = 0;
answer = operation.operate(this.firstNumber, this.secondNumber);
return answer;
}
}
9. CalculatorApp.java
package org.example.week4.exceptSample;
import java.util.Objects;
import java.util.Scanner;
public class CalculatorApp {
private static boolean firstNumEnded = false;
private static boolean operatorEnded = false;
private static boolean secondNumEnded = false;
private static Parser parser = new Parser();
public static boolean start() throws Exception{
Scanner scanner = new Scanner(System.in);
// 첫번째 피연산자 입력 받기
while(!firstNumEnded) {
firstNumResult();
}
// 연산 기호 입력 받기
while(!operatorEnded) {
operatorResult();
}
// 두번째 피연산자 입력 받기
while(!secondNumEnded) {
secondNumResult();
}
// 연산 결과 출력
System.out.println(parser.getCalculator().getFirstNumber() + ", " + parser.getCalculator().getSecondNumber());
System.out.println("연산 결과 : " + parser.executeCalculator());
return true;
}
private static void secondNumResult() throws Exception{
Scanner scanner = new Scanner(System.in);
System.out.println("두번째 숫자를 입력해주세요!");
String secondInput = scanner.nextLine();
parser.parserSecondNum(secondInput);
Integer i = parser.getCalculator().getSecondNumber();
if(i != null) {
//System.out.println(secondInput);
secondNumEnded = true;
}
}
private static void operatorResult() throws Exception{
Scanner scanner = new Scanner(System.in);
System.out.println("연산자를 입력해주세요!");
String operator = scanner.nextLine();
parser.parserOperator(operator);
AbstractOperation aO = parser.getCalculator().getOperation();
if(!Objects.isNull(aO)) {
//System.out.println(operator);
operatorEnded = true;
}
}
public static void firstNumResult() throws Exception{
Scanner scanner = new Scanner(System.in);
System.out.println("첫번째 숫자를 입력해주세요!");
String firstInput = scanner.nextLine();
parser.parserFirstNum(firstInput);
Integer i = parser.getCalculator().getFirstNumber();
if(i != null) {
//System.out.println(firstInput);
firstNumEnded = true;
}
}
}
10. Parser.java
package org.example.week4.exceptSample;
import java.util.regex.Pattern;
public class Parser {
// 그렇다면 이 클래스에서
// 우리의 메소드가 위험하다는 사실을 알려야 한다 !
// https://yoonhoou.tistory.com/entry/Java-%EC%9E%90%EB%B0%94-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D-Pattern-Matcher
private static final String OPERATION_REG = "[+\\-*/]"; // \\- : ^ , - 를 [] 안에서 나타내기
private static final String NUMBER_REG = "^[0-9]*$"; // ^는 우선 패턴의 시작, [0-9] 0부터 9까지
// *는 앞의 문자가 없을수도 많을수도, $는 패턴의 끝
private final Calculator calculator = new Calculator();
public Parser parserFirstNum(String firstInput) throws BadInputException {
if (Pattern.matches(NUMBER_REG, firstInput)) {
calculator.setFirstNumber(Integer.parseInt(firstInput));
return this;
} else {
throw new BadInputException("숫자");
}
}
public Parser parserSecondNum (String secondInput) throws BadInputException {
if (Pattern.matches(NUMBER_REG, secondInput)) {
calculator.setSecondNumber(Integer.parseInt(secondInput));
return this;
} else {
throw new BadInputException("숫자");
}
}
public Parser parserOperator (String operationInput) throws BadInputException {
if (Pattern.matches(OPERATION_REG, operationInput)) {
switch (operationInput) {
case "+":
calculator.setOperation(new AddOperation());
break;
case "-":
calculator.setOperation(new SubstractOperation());
break;
case "*":
calculator.setOperation(new MultiplyOperation());
break;
case "/":
calculator.setOperation(new DivideOperation());
break;
case "%":
calculator.setOperation(new ModOperation());
break;
}
} else {
throw new BadInputException("연산 기호");
}
return this;
}
public Calculator getCalculator() {
return calculator;
}
public double executeCalculator () {
return calculator.calculate();
}
}
11. Main.java
package org.example.week4.exceptSample;
public class Main {
public static void main(String[] args) throws Exception {
boolean calculateEnded = false;
// 구현 2.
// 계산 완료될 때까지 반복
while(!calculateEnded) {
try {
calculateEnded = CalculatorApp.start();
} catch (BadInputException e) {
System.out.println(e.getMessage());
}
}
}
}
'내배캠 초기 학습 > Java 문법 종합반' 카테고리의 다른 글
3주차 과제 - 계산기 구현 (0) | 2023.05.25 |
---|---|
4주차 공부 - List 타입 (0) | 2023.05.24 |
4주차 공부 - Generic (0) | 2023.05.24 |
4주차 공부 - 예외처리 (0) | 2023.05.24 |
Java 문법 종합반 - 1,2주차 (2) | 2023.05.22 |