질문겸 보고겸. 그러고 보니 예전에 올렸던 질문들도 해결어케 했는지 올리질 않았군요;
시험이 끝나면 올리도록 하겟스빈다- (반성반성)
오늘의 과제는 이렇스빈다.(실은 시험기간 전 주에 냈던 과제입니다만;)
명령인자를 입력받아 출력하고 데이터 형을 비교해서 무슨 형인지 나타내어라
ex)
C:\....\>java homework_1 a
입력하신 값은 : a
char형입니다.
C:\....\>java homework_1 238.756
입력하신 값은 : 238.756
float형입니다.
C:\....\>java homework_1 92837
입력하신 값은 : 92837
int 형입니다.
이거요? 처음 교수님한테서 과제에 대해 설명듣는 순간 머릿속이 백지화 될 정도로 막막했죠.
생각해보세요. 지금까지 프로그래밍 언어를 배웠는데 C++도 C처럼 배워서 객체지향프로그래밍이라는 것에 대한 개념도 제대로 서있지 않은 상태에서, 일단 그때까지 배웠던 것은 제어문까지만 배웠는데, 뜬금없이 데이터 형 판별이라니요.
어쨌거나 레포트는 제출해야겠고, 일단은 조별 수업이니 같은 조의 동기 B양과 함께 목요일 오후를 하루종일 머리를 싸맨채 시간을보냈습니다. 하나씩 하나씩 진척은 있었지만 가령 입력받은 값의 아스키코드를 이용해서 숫자인지 문자인지 파악해보려 했는데 그게 된다고 해도 숫자가 int형인지, float형인지 어찌 아나요..... (먼달)
아주그냥, 자바 API를 수백번은 검색해 본것 같네요;
지식즐을 통해서 비슷한 예제를 찾고, 거기서 사용된 메소드를 검색하거나 아니면 최대한 할수있는 만큼 만들어보거나.
여하튼 그러는 사이에 어느새 데드라인인 밤 12시는 다가오고, 마음이 급해져서 결국 지인의 도움을 받기로 결정했습니다. 역시 이런건 혼자서 끙끙대느니 물어보면서 배우는게 빠른 법인게지요.
그리하여 여차저차, 집에 돌아와 메신저로 대화를 나누며 아는 오라번께 도움을 요청하고 자문을 구하고 질문을 해대며 그렇게 얼마만큼의 시간이 지났을까요... 제출시간을 30분쯤 넘겼을 무렵, 드디어 완성했습니다!!!
솔직히 말하자면 교수님이 예시로 들어 말씀하셨던 그 세 조건만을 충족시키는 프로그램이었습니다만, (가령 문자중간에 숫자를 넣으면 데이터형을 읽다가 멈추고서 char형이라고 출력해버린다던가.. 숫자가 아니고 문자인데 .이 들어가 있으면 float형이라고 출력하지를 않나... 어쨌든 교수님이 말씀하셨던 최소한도의 조건은 만족했으니까, 하고 제출해버린겁니다. 그나마도 그걸 찾고 짜맞추고 이리저리 해보느라 얼마나 고생했는지... (게다가 솔직히 말하면 그날 저 빼고 다들 gg치고 놀아버렸단 말이죠 ㅠㅠ 엉엉)
이건 코딩해본지 시간이 2주정도 흘러서인지 당시 상황이 가물가물해서 길게 설명하기는 어렵지 싶네요; 만약에 코딩끝내서 교수님께 메일로 제출하고 바로 글을 작성했더라면 이건뭐 -_-;;; 글이 밑도끝도 없이 길어질 간지;;;
아, 그리고 비록 미흡하지만 아래의 소스는 교수님께 제출했던 <제출용 답안>입니다.
import java.io.*;
import java.lang.String;
import java.lang.Character;
public class DataCompared_1{
public static void main(String[] args) throws java.io.IOException{
//throws java.io.IOException 은 입출력 오류중에 예외적인 부분을 IOException에서 처리한다는 의미이다.
char ch;
int i;
if(args[0].indexOf('.') != -1) //indexOf를 이용해 입력받은 문자열args에 '.'이 포함되어있는지를 검색하여 float형을 구분한다.
{
System.out.println("입력한 문자는 : " + args[0]);
System.out.println("float형입니다.");
}
else
{
for(i = 0 ; i < args[0].length(); i++)
{
ch = args[0].charAt(i); /*charAt은 문자열에서 지정한 위치(i)에 있는 문자를 index로 가져오는 역할.
즉, 문자열의 첫번째(0번)부터 끝까지, 한글자씩을 ch에 넣어서 비교, 판독*/
if(Character.isDigit(ch) == true && i == (args[0].length() - 1))
{
System.out.println("입력한 문자는 : " + args[0]);
System.out.println("int형입니다.");
break;
}
/*isDigit를 써서 해당 문자가 숫자인지 문자인지를 판단하여 int 형과 char형을 구분한다.
i == (args[0].length()-1)은 만약 입력받은 값이 1개의 문자가 아니라 2개 이상의 문자열일 경우
문자열의 끝까지 판독하여 숫자인지 문자인지를 구분한다. */
else if(Character.isDigit(ch) == true){} /*이 경우, 비록 세부명령이 없더라도 else if를 사용하지 않으면
하위조건이 else에 포함되어버리기 때문에 char형을 구분하기가 어렵다. */
else
{
System.out.println("입력한 문자는 : " + args[0]);
System.out.println("char형입니다.");
break;
}
}
}
}
}
그리고, 도움을 주었던 오라번이 제출 후에 다시 프로그램을 수정해 주었습니다만 시험이 닥쳐서 제대로 되씹어볼 여유를 갖지 못했네요; 그런고로 완성본이라 할수 있는 이 소스는 주석이 달려있지 않습니다. 차후에 자근자근 되씹어 주석을 달도록 하겠습니다:)
바쁜 와중에도 초짜 도와주느라 고생하신 나무오라번, 나중에 제가 밥 쏠께요 > ㅁ<)乃 !
<추후 수정본 (주석없음) >