calculator 2
실습
0. 목차
5. 메서드로 기능 분리
6. 클래스로 기능 분리
7. 사칙연산 - 문자열로 입력받기
1. 메서드로 기능 분리
▶ 기능분리
▷ 메서드
package baek.Calculator;
import java.util.Scanner;
public class Calculator {
static int getFirstValue(Scanner scan) {
System.out.println("값을 입력하세요.");
System.out.print("NUM> ");
int numOne = scan.nextInt();
System.out.println();
return numOne;
}
static String getSymbol(Scanner scan) {
System.out.println("연산기호를 입력하세요.(+, -, *, /, q=종료)");
System.out.print("SYMBOL> ");
String symbol = scan.next();
System.out.println();
return symbol;
}
static int getSecondValue(Scanner scan) {
System.out.println("값을 입력하세요.");
System.out.print("NUM> ");
int numTwo = scan.nextInt();
System.out.println();
return numTwo;
}
static int getCalculater(int result, String symbol, int numTwo) {
if (symbol.equals("+")) {
System.out.printf("%d + %d = ", result, numTwo);
result = result + numTwo;
System.out.println(result);
System.out.println();
} else if (symbol.equals("-")) {
System.out.printf("%d - %d = ", result, numTwo);
result = result - numTwo;
System.out.println(result);
System.out.println();
} else if (symbol.equals("*")) {
System.out.printf("%d × %d = ", result, numTwo);
result = result * numTwo;
System.out.println(result);
System.out.println();
} else if (symbol.equals("/")) {
System.out.printf("%d ÷ %d = ", result, numTwo);
result = result / numTwo;
System.out.println(result);
System.out.println();
} else {
System.err.println("사칙연산 기호가 아닙니다!");
System.out.println();
}
return result;
}
static void print(int result) {
System.out.printf("최종 값 = %d\n", result);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numOne = getFirstValue(scanner);
int result = numOne;
while (true) {
String symbol = getSymbol(scanner);
if (symbol.equals("q")) {
print(result);
break;
}
int second = getSecondValue(scanner);
result = getCalculater(result, symbol, second);
}
System.out.println("종료");
}
}
값을 입력하세요.
NUM> 9
연산기호를 입력하세요.(+, -, *, /, q=종료)
SYMBOL> -
값을 입력하세요.
NUM> 2
9 - 2 = 7
연산기호를 입력하세요.(+, -, *, /, q=종료)
SYMBOL> *
값을 입력하세요.
NUM> 2
7 × 2 = 14
연산기호를 입력하세요.(+, -, *, /, q=종료)
SYMBOL> +
값을 입력하세요.
NUM> 1
14 + 1 = 15
연산기호를 입력하세요.(+, -, *, /, q=종료)
SYMBOL> q
최종 값 = 15
종료
▷ 메서드1 - 첫번째 값 입력
static int getFirstValue(Scanner scan)
▷ 메서드2 - 연산기호 입력
static String getSymbol(Scanner scan)
▷ 메서드3 - 두번째 값 입력
static int getSecondValue(Scanner scan)
▷ 메서드4 - 계산
static int getCalculater(int result, String symbol, int numTwo)
▷ 메서드5 - 결과 출력
static void print(int result)
2. 클래스로 기능 분리
▶ 기능분리
▷ 클래스
▷ 클래스1 - 계산
// Calculate
public class Calculate {
static int getCalculater(int result, String symbol, int numTwo) {
if (symbol.equals("+")) {
System.out.printf("%d + %d = ", result, numTwo);
result = result + numTwo;
System.out.println(result);
System.out.println();
} else if (symbol.equals("-")) {
System.out.printf("%d - %d = ", result, numTwo);
result = result - numTwo;
System.out.println(result);
System.out.println();
} else if (symbol.equals("*")) {
System.out.printf("%d × %d = ", result, numTwo);
result = result * numTwo;
System.out.println(result);
System.out.println();
} else if (symbol.equals("/")) {
System.out.printf("%d ÷ %d = ", result, numTwo);
result = result / numTwo;
System.out.println(result);
System.out.println();
} else {
System.err.println("사칙연산 기호가 아닙니다!");
System.out.println();
}
return result;
}
}
▷ 클래스2 - 명령
// Command
import java.util.Scanner;
public class Command {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numOne = Input.getFirstValue(scanner);
int result = numOne;
while (true) {
String symbol = Input.getSymbol(scanner);
if (symbol.equals("q")) {
Output.print(result);
break;
}
int second = Input.getSecondValue(scanner);
result = Calculate.getCalculater(result, symbol, second);
}
System.out.println("종료");
}
}
▷ 클래스3 - 입력
// Input
import java.util.Scanner;
public class Input {
static int getFirstValue(Scanner scan) {
System.out.println("값을 입력하세요.");
System.out.print("NUM> ");
int numOne = scan.nextInt();
System.out.println();
return numOne;
}
static String getSymbol(Scanner scan) {
System.out.println("연산기호를 입력하세요.(+, -, *, /, q=종료)");
System.out.print("SYMBOL> ");
String symbol = scan.next();
System.out.println();
return symbol;
}
static int getSecondValue(Scanner scan) {
System.out.println("값을 입력하세요.");
System.out.print("NUM> ");
int numTwo = scan.nextInt();
System.out.println();
return numTwo;
}
}
▷ 클래스3 - 출력
// Output
public class Output {
static void print(int result) {
System.out.printf("최종 값 = %d\n", result);
}
}
3. 사칙연산 - 문자열로 입력받기
▶ 사칙연산
▷ 문자열로 입력 scanner - nextLine
package baek.Calculator;
import java.util.Scanner;
public class StringCommand {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("계산식을 입력하세요.");
String input = scanner.nextLine();
String[] inputS = input.split(" ");
int numOne = Integer.parseInt(inputS[0]);
int result = numOne;
for (int i = 1; i < inputS.length; i += 2) {
String symbol = inputS[i];
int numTwo = Integer.parseInt(inputS[i + 1]);
result = Calculate.getCalculater(result, symbol, numTwo);
}
Output.print(result);
scanner.close();
}
}
계산식을 입력하세요.
3 + 2 * 3 / 2 + 10
3 + 2 = 5
5 × 3 = 15
15 ÷ 2 = 7
7 + 10 = 17
최종 값 = 17
▷ nextLine
nextLine은
‘3 + 2 * 3 / 2 + 10’ 이렇게 입력하면
이걸 통째로 받아옴
▷ String[] inputS = input.split(“ “);
nextLine으로 받아온 내용을 “ “ 한 칸 띄운 것을 기준으로
하나씩 배열로 담음
▷ int numOne = Integer.parseInt(inputS[0]);
첫번째 값은 첫번째 배열에 담겨있음
numOne에 첫번째 배열 값을 넣음
이 때, nextLine은 String으로 받아왔기 때문에
첫번째 값을 parseInt를 통해 Int으로 바꿔서 넣어 줌
▷ symbol과 numTwo 입력받기
i = 1로 시작해서 i += 2로 돌게 하면
inputS[i]는 배열 1, 3, 5, 7, 9에 있는 걸 꺼내줌
그래서 연산기호만 나오게 됨
연산기호 + 1 = 연산기호 다음에 오는 것 = 숫자
그래서 numTwo는 inputS[i + 1]로 꺼낼 수 있음
for (int i = 1; i < inputS.length; i += 2) {
String symbol = inputS[i];
int numTwo = Integer.parseInt(inputS[i + 1]);
result = Calculate.getCalculater(result, symbol, numTwo);
}