2008년 04월 30일
[Script] 본문 내용 펼침/접음
제가 자주쓰는건데 쓸때마다 이걸 외워서 쓸수도 없고 해서 =ㅅ=;;;
# by | 2008/04/30 03:14 | 트랙백 | 덧글(0)
# by | 2008/04/30 03:14 | 트랙백 | 덧글(0)
질문겸 보고겸. 그러고 보니 예전에 올렸던 질문들도 해결어케 했는지 올리질 않았군요;
시험이 끝나면 올리도록 하겟스빈다- (반성반성)
오늘의 과제는 이렇스빈다.(실은 시험기간 전 주에 냈던 과제입니다만;)
명령인자를 입력받아 출력하고 데이터 형을 비교해서 무슨 형인지 나타내어라
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;
}
}
}
}
}
그리고, 도움을 주었던 오라번이 제출 후에 다시 프로그램을 수정해 주었습니다만 시험이 닥쳐서 제대로 되씹어볼 여유를 갖지 못했네요; 그런고로 완성본이라 할수 있는 이 소스는 주석이 달려있지 않습니다. 차후에 자근자근 되씹어 주석을 달도록 하겠습니다:)
# by | 2008/04/30 03:11 | 프로그램관련 | 트랙백 | 덧글(2)
아아, 잊어먹지말자고 적어놓으려는거에요 ㅠㅠ <<이놈의금붕어대가리;
그러므로 철저히 메모용. 수업시간에 들었던대로. 설명은 나중에 정리하도록 할께요.
-JAVA -
메소드 참조 개념 : call by value, call by address(reference)
접근 한정자 : public, private, protected, default(package), static, final, abstract, naive, transient, volatile,synchronized
call by address는 겉으로 보기에는 C언어에서의 구조체와 유사한 형식(그러나 구조체와 같지는 않다).
예제 5_5를 예로 들었을때, 객체 속성 변수로 선언된 값만을 아래에 new를 통해 재정의한 객체를 사용할수 있음.
재귀호출같은것이 일어나지 않는 것은, 호출메소드 Sw2.sw2(ken)에서 보았을때 앞서 정의했던 클래스 sw2에는 값을 되돌릴 return값이 없기 때문.(선언시 public static void sw2(Sw2 boo)) 그러므로 사용되는(호출되는)값은 변수로 선언된 int x, y뿐.
앞서 정의한 클래스에서 static을 삭제해 버릴 경우 non-static method sw1(int, int) cannot be referenced from a static context라는 에러메세지가 뜬다.//main()에서 참조할수 없다는 뜻
이유는 static으로 선언한 변수(메소드)는 인스턴스가 아니라 클래스 안에 속하며, 대상이 변하느냐 변하지 않느냐의 차이인데 static은 할당되어있는 메모리 공간을 정형화시켜 고정시킨다. (여기서의 고정이란 이동에서의 고정이 아닌 변화되지 않음을 의미) non-static으로 설정되어 static에서는 접근이 불가. 형식이 다르기 때문임.
//수업시간에 막 적느라 대충썼더니만 이거대체 뭔소린지 -_-;
main()메소드의 경우 public과 static한정자를 필수적으로 사용하게 되어있는데, 그렇게 정의해두지 않으면 주 메인 프로그램이 실행되는 곳에 접근이 불가능하므로 결과적으로 실행(확인)이 불가능하게 된다. 만일, main()메소드가 없더라도 프로그램이 실행되게 하려면 애플릿프로그램등과 같이 main()메소드가 아니라도 실행할 수 있는 웹 브라우저처럼 주 프로그램 실행 하는 곳이 있으면 된다.
# by | 2008/04/18 19:49 | 공돌이이야기 | 트랙백 | 덧글(0)
# by | 2008/04/18 02:01 | 공돌이이야기 | 트랙백 | 덧글(0)
# by | 2008/04/03 19:44 | 공돌이이야기 | 트랙백 | 덧글(4)
◀ 이전 페이지다음 페이지 ▶