KoreaIt Academy/JAVA 예제

람다식 심화 실습 문제 - 계산기

hongeeii 2021. 7. 22.
728x90
반응형

여러 개의 정수를 입력받아서 알맞는 덧셈, 뺄셈 결과를 확인하는 애플리케이션 제작

* 사용자가 정상적으로만 입력한다는 가정 하에 구현하도록 합니다.
* 두 정수를 전달받은 후 int로 리턴하는 calc 추상메소드 선언(함수형 인터페이스 제작)
* 두 정수의 덧셈, 뺄셈을 구해주는 함수형 인터페이스를 리턴하는 메소드 선언(람다식으로 리턴)
* 전체 식을 전달받은 후 String[]로 리턴하는 getOper 추상메소드 선언(함수형 인터페이스 제작)
* main메소드에서 getOper 구현

 

입력 예1) 7 + 35 - 9
출력 예2) 33

입력 예2) -9 + 8 + 10
출력 예2) 9

 

MyMath 인터페이스

@FunctionalInterface
public interface MyMath {
      public int calc(int num1, int num2);
}

OperCheck 인터페이스

@FunctionalInterface
public interface OperCheck {
      public String[] getOper(String expresstion);
}

 

구현한 Calc 클래스

public class Calc {
public static MyMath calculator(String oper) {//MyMath 타입 리턴
MyMath math = null;
switch (oper) {
case "+":
math = (num1, num2) -> num1 + num2;
break;
case "-":
math = (num1, num2) -> num1 - num2;
break;
}
return math;
}

public static void main(String[] args) {
String msg = "정수의 덧셈과 뺄셈에 대한 완성된 연산식을 작성하세요.";
String exampleMsg = "예)7+35-9";
Scanner sc = new Scanner(System.in);
String[] nums = null;
String[] opers = null;
OperCheck operCheck = (expression) -> {
String temp = "";

for (int i = 0; i < expression.length(); i++) {
char c = expression.charAt(i);
if (c == 43 || c == 45) { ////43: "+"   45: "-"
temp += c;
}
}
return temp.split("");
};
String temp = null;
int num1 = 0, num2 = 0;

System.out.println(msg);
System.out.println(exampleMsg);
//      temp = "0" + sc.next();
temp = sc.next();

nums = temp.split("\\+|\\-");
opers = operCheck.getOper(temp);
num1 = Integer.parseInt(nums[0].equals("") ? opers[0] + nums[1] : nums[0]);
for (int i = 0; i < opers.length; i++) {
if (num1 < 0 && i == 0) {
continue;
}
num2 = Integer.parseInt(nums[i + 1]);
num1 = calculator(opers[i]).calc(num1, num2);
}
System.out.println(num1);
}
}

 

728x90
반응형

'KoreaIt Academy > JAVA 예제' 카테고리의 다른 글

Stream을 사용한 예제  (0) 2021.07.27
Encrypt : 암호화 간단한 예제  (0) 2021.07.22
익명클래스와 Adapter을 활용한 옷가게 예제  (0) 2021.07.20
은행 예제 ★★★★★  (0) 2021.07.20
JAVA 배열 예제  (0) 2021.07.13

추천 글