hj_13114
10
2021-09-26 02:17:00 작성 2021-09-26 02:24:23 수정됨
1
101

자바 switch 계산 질문드려요


public class ch03 {


public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in = new Scanner(System.in);

        

    System.out.print("계산 :");

      String b= in.nextLine() ;  

      int num1= in.nextInt();

      int num2= in.nextInt();

      int result= 0;


      switch(b) {

      case"+":

         result = num1 + num2;

         break;

      case"-":

         result = num1 - num2;

         break;

      case"*":

         result = num1 * num2;

         break;

      case"/":

         result = num1 / num2;

         break;

      case"%":

         result = num1 % num2;

         break;

      default: 

         System.out.println("오류");

         break;

      }

      System.out.println("결과 : " + result);


}


}


결과값이 아래와 같이 나오는데 저기서 초록색으로 된건  제가 1이랑 2는 저렇게 치지 않고 바로 결과값 나오게 할려면 어떻게 해야하나요??



계산: 5-1
결과:4

이런식으로 나오게  하고 싶어요!!!
계산을 제가 입력하고 결과가 계산되서 나오게 하고 싶은데 이상하게 나오네요ㅜㅜ

0
  • 답변 1

  • 사과돌이
    163
    2021-09-26 10:40:53 작성 2021-09-26 10:44:38 수정됨

    [현재 코드 분석]

    현재 코드의 원래 의도대로 작동하게 하려면

    b는 연산자만 입력하고 (+, -, *, /)

    int num1, num2에는 숫자만 입력해서

    +

    1

    2

    순으로 입력하면

    switch(b) 문에서 case '+'에 해당되어 1+2를 연산해서 result에 3이 담겨 출력하게 됩니다.



    [오류가 나는 이유]

    작성자분이 b에 5-1을 입력하면 결과물이 case문에는 +, -, *, /라는 조건만 있기때문에 default에 소속되므로 오류메세지를 출력하며 결과가 0이됩니다.



    [작성자분의 의도 및 해결방안]

    만약 b에 5-1만 입력하고, int num1과 num2에는 scanner로 입력하지 않고 b의 데이터만 이용해서 연산을 원한다면, string 타입의 b를 숫자와 연산자를 따로 나누어 각각의 공간에 담고 (정규표현식 등을 이용하여) 연산하는 과정이 필요합니다.


    해당 b를 파싱하는 과정에서 띄어쓰기가 있거나, 연산자 개수가 증가하는 등의 예외처리 과정이 필요하므로 더 복잡해집니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.