본문 바로가기
Programming/JAVA

[JAVA] 이칙(+,-) 계산기

이칙(+,-) 계산기






package Test1;
 
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
public class Calculator {
    public static void main(String[] args) {
 
        Scanner scanner = new Scanner(System.in);
        System.out.println("계산 수식 : ");
 
        String susik = scanner.nextLine(); //엔터 치기 전까지 입력 해야함
 
        String[] operand = susik.split("\\+|\\-"); // suplit -> + or -를 만나면 쪼개라, 연산자 앞의 숫자를 배열에 넣음
        Queue<Character> operator = new LinkedList<Character>(); //문자라서 Character형
 
        for (int i = 0; i < susik.length(); i++) {
            if(susik.charAt(i)=='+') { //susik의 문자열에서 +를 만나면 +를 operator(큐)에 넣어라
                operator.add('+');
                continue;
            }    
            else if(susik.charAt(i)=='-') {
                operator.add('-');
                continue;
            }else {
                continue;    //숫자가 들어오면 계속 진행 되도록
            }
        }
        
        int plusSum = 0;    int minusSum = 0;    int result = 0;
        plusSum = Integer.parseInt(operand[0]); //Integer.parseInt 함수로 문자열을 정수로 바꿈
                                                // 첫번째 피연산자는 바로 넣음
        
        for (int i = 1; i < operand.length; i++) { //첫번째는 고정 했으니 2번째 부터 시작 -> i 초기값 1로 시작
            try {
                char ch = operator.poll(); //큐에서 데이터(연산자)를 꺼내옴, 만약 큐가 비어있다면 NULL을 반환
                if(ch == '+') {
                    plusSum += Integer.parseInt(operand[i]);
                    continue;
                }else if(ch == '-') {
                    minusSum += Integer.parseInt(operand[i]);
                    continue;
                }
            } catch (NullPointerException e) {
                break;
            }
        }
        result = (plusSum - minusSum);
        System.out.println("결과 : "+result);
    }
}
 


'Programming > JAVA' 카테고리의 다른 글

[JAVA] LINKEDLIST를 이용한 성적처리  (3) 2018.04.15
[JAVA] 경로  (1) 2018.04.15
[JAVA] 성적 처리  (0) 2018.04.15
[JAVA] Wrapper Class  (0) 2018.04.14
[JAVA] 쓰레드(Thread)  (12) 2018.03.25