PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/07/30 14:05:31
Name arq.Gstar
Subject 자바 질문좀 드릴게요 ㅠㅠ;
제가 자바 초보라서 방학때 혼자 공부하는데요..
간단한 주소록을 만들어보려고 하는데 어렵네요.. ㅠㅠ;
(어제도 질문 드렸지만..; 오늘은 다른데서 막힙니다;;)

객체를 배열로 선언해서 각 배열에 주소록 정보를 집어넣는 프로그램으로 만들고 있습니다.

질문드릴점은 3가지인데요(좀 많죠.. ㅠㅠ; 죄송합니다; )

1. Addresslist 클래스의 inputdata() 메소드에서 Saveadress 로 선언된 객체에
   예를들어서 adl[i].Iname = In 형식으로 문자를 넣으려고 하는데 그게 안되네요..
   그부분에서 java.lang.NullPointerException 에러가 납니다..

2. main() 메소드에서 switch 문을 사용하는데 정수가 아닌값을 입력하면 에러가 나는데
   그부분은 어떻게 해줘야 하는지..;

3. 키보드에서 입력을 받는데 한글은 입력을 못받네요.. 영어만 입력이 됩니다..

여러 선배님들의 조언 부탁드립니다.. ==;


import java.io.*;

// 주소록 목록을 저장하는 클래스

class Saveadress {
        
                String Iname = "";
                String Ipnum = "";
                String Iadr = "";
        
}

// 주소록 목록을 찾는 클래스
/*
public class Search {
        public static void searchcnt(){
                        
        }
} */

public class Addresslist {
        
        static Saveadress[] adl = new Saveadress[5];        // 객체 배열을 이용해서 주소록 정보를 저장
        
        int count = 0;        // 주소록 목록의 갯수를 count 에 저장

        public void adrcnt() {

                System.out.println("adrcnt() 입니다.");
                
                int i;
                
                for(i = 0; i == 5 ; i++) {
                        if(adl[i] != null)
                                { i++; count = i; }
                        else
                                count = i;
                                break;                                
                }
                
        }
        
        // 데이터 입력 메소드
        public void inputdata() throws IOException {
                
                System.out.println("inputdata() 입니다.");
                

                try{
                        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
                        for(int i = count; i < 5; i++) {
                                System.out.println("이름을 입력하세요 : ");
                                String In = "";
                                String Ipn = "";
                                String Iad = "";
                                while((In = stdin.readLine()) != null && In.length() != 0) {
                                        In = stdin.readLine();
                                        System.out.println(i + "번째 위치에입력받았음.");
                                        adl[i].Iname = In;
                                
                                        
                                System.out.println("전화번호를 입력하세요 : ");
                                        Ipn = stdin.readLine();
                                        System.out.println(i + "번째 위치에입력받았음.");
                                        adl[i].Ipnum = Ipn;
                                
                        
                                System.out.println("주소를 입력하세요 : ");
                                        Iad = stdin.readLine();
                                        System.out.println(i + "번째 위치에입력받았음.");
                                        adl[i].Iadr = Iad;
                                }        
                                count = i;
                        }
                }catch(Exception e)        {  e.printStackTrace();  /*System.err.println(e);*/}
                Addresslist.main(null);
        }
        
        //메인 메소드
        public static void main(String[] args) throws IOException {
                
                Addresslist adrmain = new Addresslist();
                adrmain.adrcnt(); // 카운트 계산
                
                int select;
                
                // 메인메뉴
                System.out.println(adrmain.count + "개의 주소록이 메모리에 있습니다.");
                System.out.println("===============");
                System.out.println("주소록 메뉴~");
                System.out.println("1. 주소록 입력");
                System.out.println("2. 주소록 검색");
                System.out.println("3. 주소록 수정");
                System.out.println("4. 주소록 삭제");
                System.out.println("번호를 선택하세요 : ");

                
                // 메뉴 고르기 위한 입력문
                BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
                String sel = stdin.readLine();
                select = Integer.parseInt(sel);
                
                switch(select) {
                        case 1:
                                adrmain.inputdata();
                                break;
                        case 2:
                                break;
                        case 3:
                                break;
                        case 4:
                                break;
                        default:
                                System.out.println("1부터 4까지만 선택하세여");
                                Addresslist.main(args);
                        break;
                }
        
        }
}

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
RunDavid
08/07/30 14:46
수정 아이콘
2. main() 메소드에서 switch 문을 사용하는데 정수가 아닌값을 입력하면 에러가 나는데...

네. switch(select) 에서 select 의 value는 integer 혹은 character 밖에 못 씁니다...
혹시 string value 를 써야만 한다면 if 문을 쓰실수 밖에는 없습니다.
RunDavid
08/07/30 14:48
수정 아이콘
daewekim@gmail.com 으로 전체 소스 한 번 주실수 있으세요?

저도 초보라 공부하는 셈 치고 한번 봐볼께요 ^^;
arq.Gstar
08/07/30 14:55
수정 아이콘
RunDavid님// 답변주셔서 감사합니다!!
2번 답변에 말인데요.. 음.. integer 말고 입력이 되면 아예 막아버리는 방법은 없는건가요?;;

p.s 엊그제부터 짜기 시작한 소스인데 저기에서 답보입니다. -_-;; 저게 전체예요 으허허허헝..ㅠㅠ
정지연
08/07/30 15:02
수정 아이콘
static Saveadress[] adl = new Saveadress[5];

이것만으로는 adl 객체는 Saveadress 타입의 5개짜리 array 라고만 선언이 된거고
실제 5개의 adl 객체 각각에 대해서는 메모리가 할당되어 있지 않은 상태죠.
그래서 adl[i].Iname 을 할때 adl[i] 객체 자체가 null 이라 NullPointerException 이 뜹니다.
그러므로 Addresslist 클래스를 생성할때 adl 객체 하나하나에 일일히 생성을 해줘야 합니다.
이정도만 말씀드려도 이해하실거라고 생각됩니다.
arq.Gstar
08/07/30 15:32
수정 아이콘
정지연님// 아하! 그렇군요 지연님 감사합니다 ㅡㅜ; 많은 도움 됐습니다 ^^;
RunDavid
08/07/30 16:09
수정 아이콘
이렇게 해보세요
import java.util.Scanner;

public class Check

public static void main(String[] args)
{
System.out.println("Start");
while(true)
{
try
{
Scanner in = new Scanner(System.in);
System.out.println("Input Integer Only");
int select = in.nextInt();
System.out.println(select);
break;

catch (java.util.InputMismatchException exception)

System.out.println("Input was not a number");

}
System.out.println("End");
}
}
RunDavid
08/07/30 16:28
수정 아이콘
생각해보니 switch 문들어가기전에 input value 를 확실히 해 놓는게 좋겠군요, 다시 돌아가서 받긴 애매하니깐.
제가 위에쓴 부분에서 try 안쪽을 이렇게 바꿔보세요

try

Scanner in = new Scanner(System.in);
System.out.println("Input Integer Only");
int select = in.nextInt();
if(!(select > 0 && select <5))
System.out.println("1부터 4까지만 선택하세여");
else
{
System.out.println(select);
break;

}
arq.Gstar
08/07/30 18:59
수정 아이콘
RunDavid님// 답변 감사합니다. 외워야할게 많아서 걱정입니다 ㅠㅜ;;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
40194 핸드폰을 인터넷으로 샀는데 개통이 안됩니다. [1] Good_Life2130 08/07/30 2130
40193 AB*CDE=FABEE 의 풀이 좀 해주세요..ㅜ.ㅜ [5] 지식iN1870 08/07/30 1870
40191 테란 EMP 관련 질문입니다. [8] a50313110 08/07/30 3110
40190 카런 튕김현상 [3] 바람과쓰러지2233 08/07/30 2233
40188 김대중 전대통령과 DJP연합에 관한 질문입니다. [4] 포셀라나2137 08/07/30 2137
40187 11번가 쇼핑몰 어떤가요 ?? [4] journey214341 08/07/30 4341
40185 연락해도 될까요? [13] 비야레알2113 08/07/30 2113
40184 워크래프트의 전략성에 관한 질문입니다. [9] 휘리노이에스1865 08/07/30 1865
40183 avast가 인터넷 브라우저를 켜면 경고를 막 울려대네요;; [5] NoReason1932 08/07/30 1932
40179 캐나다 유학중인 분들께 질문있습니다. [5] 박대희1821 08/07/30 1821
40178 아톰 프로세서 데스크탑 성능 [3] 초보저그2105 08/07/30 2105
40177 자바 질문좀 드릴게요 ㅠㅠ; [8] arq.Gstar2169 08/07/30 2169
40176 토익 관련 질문입니다. [1] 사랑님1500 08/07/30 1500
40175 양심선언한 의경 [1] 바람과쓰러지2122 08/07/30 2122
40174 볼만한 뮤지컬 추천받고 싶습니다. [5] 우라님1910 08/07/30 1910
40171 핸드폰 기변에 관한 질문 이요... [3] 깊고 슬픈 바다1527 08/07/30 1527
40170 PGR21의 뜻이 뭔가요? [7] 살인의추석2356 08/07/30 2356
40168 살탔을때 어떻게 해야 하나요? [8] Good_Life9484 08/07/30 9484
40167 Essential Grammar In Use 를 가르쳐 보려고 합니다. [7] 大司諫2312 08/07/30 2312
40166 동일작업그룹내 xp 프로페셔널간에 특정폴더 암호 거는 법 알려주세요~~ 라임밍기뉴1822 08/07/30 1822
40165 죄송하지만 견적 한번만 더 의견들어볼께요;;(대충 짜놨음) [7] 호기심남2114 08/07/30 2114
40164 컴퓨터가 이상해요. 도와주세요. 너는 내 운명1575 08/07/30 1575
40163 워 3에서도 프로가 아마추어에게 지는 일이 종종 일어나나요? [9] 휘리노이에스2147 08/07/30 2147
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로