'삼항연산자'에 해당되는 글 1건

  1. 2007.07.20 간단한 프로그램 예제 두가지

1. 숫자 하나를 입력받아 그 수가 1이면 "남성", 2이면 "여성' 이라는 글자를 출력하는 프로그램을 만들어 보자.

예시 :
성별을 입력하세요.(남성 : 1, 여성 : 2) : 1
당신은 남성입니다.

풀이과정
-> 이러한 문제들을 보면, 상당히 애매모호한게, 과연 진도상에서 배우지 않은 것을 사용해도 되는가라는 문제이다. 이 문제를 예로 들면, if 문을 사용해도 가능한지가 궁금했었던 문제인데, 문제 자체는 어려울 것이 없지만, 진도상에서 보면, 아직 if 문이라는 진도가 나오지 않았고, 삼항 연산자만 등장했기에, 문제의도가 삼항 연산자만을 가지고 풀라는 이야기로 해석해서, 삼항 연산자로만 풀었지만 이렇게 되면, 문제가 되는 것이, 과연 1이나 2를 제외한 나머지 키 값을 입력하면??

if 문을 사용한다면, 금방 풀리겠지만, if 문을 사용하지 않는다면... 흠.... 내 머릿속으로는 불가능... if 문을 사용하지 않고, 또한, 위의 문제가 발생하는 프로그램 소스 코드는 다음과 같다.

소스코드
import java.io.*;

class Sex {
    public static void main(String[] args) throws IOException {
        BufferedRead in = new BufferedReader(new InputStreamReader(System.in));

        String str = "";      
        System.out.print("성별을 입력하세요.(남성 : 1, 여성 : 2) :");
        int sex = Integer.parseInt(in.readLine());
        // in.readLine() 은 문자열을 위한 것이지, 정수형이나, 실수형을 위한 것은 아니다.
        // 문자열을, 숫자형태인, 정수형으로 바꿔서, 다음 삼항 연산자를 이용하여 연산을 하였다.

        str = sex == 1 ? "남성" : "여성";

        System.out.print("당신은 " + str + "입니다.");     
    }
}
위의 문제는 아까도 말했듯이, 그렇다면, 1과 2를 제외한 나머지 키를 입력했을 경우에는??? if 문을 사용하는 수밖에... -0-


2. 문자 하나를 입력받아 그 문자가 산술 연산자인지 아닌지를 판단하는 프로그램을 만들어 보자.

예시 :
산술 연산자를 입력하세요.('+', '-'. '*', '/', '%') : +
'+'는 산술 연산자 입니다.

산술 연산자를 입력하세요.('+', '-'. '*', '/', '%') : a
'a'는 산술 연산자가 아닙니다.

풀이과정
-> 여기서 막혔던 문제는 in.readLine() 이라는 메소드와, System.in.read() 라는 메소드의 몇가지 잘못된 이해에서 비롯되었다.

알 다시피 System.in.read() 는 문자 하나의 값만을 가질수 있으며, 엔터키를 입력하면, 엔터키에 대한 처리까지 해주어야 되는 번거로움이 있다. 그래서 나는 in.readLine() 이 더 편리한 것인줄 알고, in.readLine() 을 사용하여, 문제를 처리하려고 했다.

여기서, 아직 이해 못한 부분이 하나 등장하는데,

삼항연산자에서는 조건식에 문자열을 사용하냐 못하냐가 바로 그것이다. 나는 사용할수 있다고 생각을 하고, 다음 같은 소스 코드를 짜버렸다.

소스코드 // 실행은 되나, 오류 발생
import java.io.*;

class Operating {
    public static void main(String[] args) throws IOException {
       BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

       String str, op = "";
      
       System.out.print("산술 연산자를 입력하세요. ('+', '-', '/', '*', '%') : ");
       op = in.readLine();

       str = op == "+" || op == "-" || op == "/" || op == "*" || op == "%" ? "는 산술 연산자 입니다." : "는 산술 연산자가 아닙니다.";
      
       System.out.println("'" + op + "'" + str);
    }
}
하 지만, 여기서 발생하는 오류는, 무엇을 집어넣던지 간에, 삼항 연산자는, 조건식에서 false 라고 인식, 항상, false 부분에 있는 항을 실행시킨다. 결국, in.readLine() 사용을 포기하고, 문자열이 아닌, 문자값 하나만을 받는, System.in.read() 를 사용했다.

소스코드 // 문자 값을 사용하여 처리
import java.io.*;

class Operating {
    public static void main(String[] args) throws IOException {
       String str = "";

       System.out.print("산술 연산자를 입력하세요 ('+', '-'. '*'. '/', '%') : ");

       char op = (char)System.in.read();

       str = op == "+" || op == "-" || op == "*" || op == "/" || op == "%" ? "는 산술 연산자입니다." : "는 산술 연산자가 아닙니다.";

       System.out.println("'" + op + "'" + str);
    }
}
오류없이, 실행 성공, 이는 다음과 같이, 아스키 코드값을 이용하여 작성할수도 있지만, 모든 문자의 아스키 코드값을 외울수도 없는 노릇이고....

소스코드 // 아스키 코드 값을 사용하여 처리
import java.io.*;

class Operating {
    public static void main(String[] args) throws IOException {
       String str = "";

       System.out.print("산술 연산자를 입력하세요. ('+', '-', '/', '*', '%') : ");
       int op = System.in.read();

       str = op == 43 || op == 37 || op == 42 || op == 45 || op == 47 ? "는 산술 연산자입니다." : "는 산술 연산자가 아닙니다.";

       System.out.println("'" + op "'" + str);
    }
}
이상... 이며 아직, 해결 못한 부분은 다시 한번 알아봐야 하겠다.
:

BLOG main image
아무거나 공부하자!!! by Young79

공지사항

카테고리

분류 전체보기 (79)
Programing (29)
English (31)
Graphic (4)
Saying on T"We"tter (15)

최근에 올라온 글

최근에 달린 댓글

글 보관함

달력

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total :
Today : Yesterday :