- 
                Notifications
    You must be signed in to change notification settings 
- Fork 155
[4기 - 김재웅] 1~2주차 과제 : 계산기 구현 미션 제출합니다. #147
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: kju2405
Are you sure you want to change the base?
Changes from 3 commits
1c5c20b
              31d64fe
              d42a6d9
              b36e927
              c0c1a07
              14789d6
              ef5eeca
              1bd816a
              2b75683
              8e7fc67
              2324418
              71917d0
              15ffeda
              50b581d
              d31597e
              057119f
              8e49f93
              1429b49
              0f7a612
              c22e1c6
              4f44f1b
              f8ef218
              63e778c
              8f97f36
              eee0518
              cb39427
              File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| package org.example; | ||
|  | ||
| public interface CalOrder { | ||
| public abstract void calPriorityFirst(); | ||
| public abstract void calPrioritySecond(); | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,66 @@ | ||
| package org.example; | ||
|  | ||
| import java.util.Stack; | ||
|  | ||
| public class Calculate implements CalOrder{ | ||
|          | ||
| private String expression; | ||
| Stack<String> expressionStack = new Stack<>(); | ||
| ExpressionRepository repository = new ExpressionRepository(); | ||
| int result = 0; | ||
|  | ||
| public Calculate(String expression) { | ||
| this.expression = expression; | ||
| String[] expressionArr = expression.split(" "); | ||
| for (String inputVal : expressionArr) { | ||
| expressionStack.add(inputVal); | ||
| } | ||
| } | ||
|  | ||
| public void calculate(){ | ||
| calPriorityFirst(); | ||
| calPrioritySecond(); | ||
| } | ||
|  | ||
| @Override | ||
| public void calPriorityFirst() { | ||
| for (int i = 1; i < expressionStack.size(); i+=2) { | ||
| if (expressionStack.get(i).equals("*")) { | ||
| multiply(i); | ||
| i -= 2; | ||
| } else if (expressionStack.get(i).equals("/")) { | ||
| divide(i); | ||
| i -= 2; | ||
| } | ||
| } | ||
| } | ||
|  | ||
| @Override | ||
| public void calPrioritySecond() { | ||
| result = Integer.parseInt(expressionStack.get(0)); | ||
| for (int i = 1; i < expressionStack.size(); i += 2) { | ||
| if (expressionStack.get(i).equals("+")) { | ||
| result += Integer.parseInt(expressionStack.get(i + 1)); | ||
| } else { | ||
| result -= Integer.parseInt(expressionStack.get(i + 1)); | ||
| } | ||
| } | ||
| System.out.println(result); | ||
| repository.save(expression,result); | ||
| } | ||
|  | ||
| public void multiply(int idx){ | ||
| result = Integer.parseInt(expressionStack.get(idx - 1)) * Integer.parseInt(expressionStack.get(idx + 1)); | ||
| expressionStack.add(idx - 1, String.valueOf(result)); | ||
| expressionStack.remove(idx); | ||
| expressionStack.remove(idx); | ||
| expressionStack.remove(idx); | ||
| } | ||
|  | ||
| public void divide(int idx) { | ||
| result = Integer.parseInt(expressionStack.get(idx - 1)) / Integer.parseInt(expressionStack.get(idx + 1)); | ||
| expressionStack.add(idx - 1, String.valueOf(result)); | ||
| expressionStack.remove(idx); | ||
| expressionStack.remove(idx); | ||
| expressionStack.remove(idx); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| package org.example; | ||
|  | ||
| import java.util.ArrayList; | ||
| import java.util.List; | ||
|  | ||
| public class ExpressionRepository implements Repository { | ||
| private static List<String> store = new ArrayList<>(); | ||
|  | ||
| @Override | ||
| public void save(String expression, int result) { | ||
| store.add(expression + " = " + result); | ||
| There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 요구사항 그대로 값을 저장하는 것도 좋지만, | ||
| } | ||
|  | ||
| @Override | ||
| public List<String> getRecord() { | ||
| return store; | ||
| } | ||
|          | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| package org.example; | ||
|  | ||
| import java.util.List; | ||
| import java.util.Scanner; | ||
|  | ||
| public class Main { | ||
| public static void main(String[] args) { | ||
|  | ||
| int choice = 0; | ||
|  | ||
| while (true) { | ||
| choice = getChoice(); | ||
|          | ||
| System.out.println(); | ||
|          | ||
| if (choice == 1) { | ||
|          | ||
| new UserInterfaceImpl().showRecord(); | ||
|          | ||
| } else { | ||
| String expression = typeExpression(); | ||
| new Calculate(expression).calculate(); | ||
|          | ||
| } | ||
| System.out.println(); | ||
| } | ||
| } | ||
|  | ||
| public static int getChoice() { | ||
| Scanner scanner = new Scanner(System.in); | ||
|  | ||
| System.out.println("1. 조회\n2. 계산\n"); | ||
| System.out.print("선택 : "); | ||
| return scanner.nextInt(); | ||
| } | ||
|  | ||
| public static String typeExpression() { | ||
| Scanner scanner = new Scanner(System.in); | ||
| return scanner.nextLine(); | ||
| } | ||
|          | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| package org.example; | ||
|  | ||
| import java.util.List; | ||
|  | ||
| public interface Repository { | ||
| void save(String expression, int result); | ||
| List<String> getRecord(); | ||
| } | 
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| package org.example; | ||
|  | ||
| public interface UserInterface { | ||
| public abstract void showRecord(); | ||
| } | 
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| package org.example; | ||
|  | ||
| import java.util.List; | ||
|  | ||
| public class UserInterfaceImpl implements UserInterface{ | ||
|  | ||
| ExpressionRepository repository = new ExpressionRepository(); | ||
| @Override | ||
| public void showRecord() { | ||
| List<String> record = repository.getRecord(); | ||
| record.forEach(System.out::println); | ||
| } | ||
|          | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
interface의 메서드는 기본적으로 추상 메서드이기 때문에 abstract가 없어도 됩니다.