수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

배열에관한 두번째 질문입니다.

LO

2023.04.01

먼저, 자주 들리지 않고, 가끔 들어와서 질문만 하고 나가고, 그러는 점 정말 죄송합니다.

지금은 남들에게 도움이 될정도로 실력이 되지는 않지만, 나중에 정말 잘하게 되면,

모바일쪽에 관해서 여러분들에게 많은 도움이 되도록 노력하겠습니다.

약속드리겠습니다.
두번째 질문은 첫번째 질문과 비슷합니다.

게임을 만들다보니 4차원배열까지 쓰게 되더군요. 구지 4차원배열을 쓸필요는 없지만,

재사용성을 위해서(??), 코딩을 쉽게 해야한다고 해야하나(??) ^^;;

아무튼요, 그렇게 쓰게 되더라구요..^^

여기서는 3차원배열로 예를 들겠습니다.
int test[][][] = new int[a][b][c];
첫번째 a배열은 몬스터의 종류라고 생각하십시요.

두번째 b배열은 각몬스터가 나오는 갯수만큼 배열이 생긴다고 생각하십시요.

세번째 c배열은 각몬스터마다 x,y 좌표라고 생각하십시요.(마지막은 2개의 배열이 고정으로 생기겠죠.)
몬스터의 종류가 원숭이와 돼지 두개가 있다고 생각해보면,

a에는 2라는 값이 들어가게됩니다.

(a가 0번째는 원숭이, 1번째는 돼지)
그리고 원숭이가 두마리가 나오고, 돼지는 4마리가 나온다고 생각해보면

그러면 a가 0번째일경우 b에는 2가 들어가야하고,

a가 1번째일경우는 b에 4가 들어가야합니다.
그리고 마지막에 c에는 전부다 2개가 생성이되죠.

(0 : x좌표, 1 : y좌표)
이해가 되시죠??
제가 저렇게 사용을 하기 위해서 사용한 코딩은 첫번째 질문과 비슷합니다.

(여기선 npc가 몬스터라 생각하십시요. 어짜피 똑같거든요..ㅡㅡ;;)

(파일로부터 읽어 오는겁니다.)
int npcNum = dis.readByte();//엔피시의 갯수를 가져옵니다.
if(npcNum != 0){
npcFolder = new String[npcNum]; ///파일이 들어있는 폴더를 읽어오는것인데 여기선 상관없습니다...
for(int j=0; jnpcNum; j++){
temp = new byte[folderSize];
for(int i=0; itemp.length; i++){
temp[i] = dis.readByte();
}
npcFolder[j] = new String(temp).trim();
}///////////////////////////////////////파일 폴더 읽기 끝 npcPlaceNum = new byte[npcNum];
for(int i=0; inpcNum; i++){
npcPlaceNum[i] = dis.readByte(); // 엔피시가종류마다 몇개가 나오는지 읽어옵니다. npcNum만큼 돌면서 읽기때문에
} // 각종류마다 몇개가 읽는지 읽어오게 되죠. npcCoordinates = new short[npcNum][0][0]; //엔피시의 종류의 갯수를위에서 설명했을시 npcNum이 a라는 값에 들어가는거죠.
for(int i=0; inpcNum; i++){
npcCoordinates[i] = new short[npcPlaceNum[i]][2]; //첫번째 질문과 같이 또다시 new라는 키워드를 생성을 시켜서
} //배열을 선언합니다. 이렇게 하는 이유는 종류마다 배열을다르게
//생성을 시켜줘야 하기때문이죠
for(int i=0; inpcCoordinates.length; i++){
for(int j=0; jnpcCoordinates[i].length; j++){
for(int k=0; knpcCoordinates[i][j].length; k++){
npcCoordinates[i][j][k] = dis.readShort();//좌표를 읽어옵니다.
}
}
}
}
대충이런식으로 코딩이 되있습니다.

일단, 문제는 첫번째 질문과 같은 문제가 생기죠.

그것보다는 여기서 질문을 드리고 싶은것은,

보통 배열을 선언할때,

int test[][][] = new int[3][2][2];

이런식으로 선언을 하게되죠.

그렇게 되면, 배열전체다 똑같이 선언이 되는건데,

맨위에서 a, b, c로 읽으신거와 같이,a의 0번째와 1번째 의 b의 배열이 다르게 잡혀야 한다는 것이지요.

그렇게 하기위해서는 new라는 키워드로 다시 생성을 시켜줄수 밖에 없는것같은데,

그렇게 되면, 첫번째와 같은 문제가 생길것이고,그래서 문제가 생기면 전부 뜯어 고쳐야하니..

진도도 못나가겠고..ㅠㅠ 정말 문제가 생기는 것인지도 모르겠고ㅠㅠ
이러지도 못하고, 저러지도 못하고.ㅠ 정말 답답합니다.

여러분들 같으면 어떻게 하시겠습니까??

저코딩이 정말 잘못된거에요??

그럼 어케 해야 배열을 잘사용하는겁니까?

좀 알려주십시요.ㅠ

선배님들의팁들을 조금만 알려주십시요.ㅠ

저렇게 사용하면 메모리의 빈공간이 생겨 덤블링이 일어난다고 하는데, 정말 그렇게 되는거예요?

아 어케해야하는지..ㅠㅠ

아무튼 제글 읽어주시느라, 감사드리구요.

전부열심히 일해서 잘먹고 잘삽시다.^^

저두 그럴려고 열심히 일하고있어요.^^/

수고하세요.^^

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 세찬

    아무튼 감사드립니다.^^

  • 눈꽃

    실제로 데이터를 사용할때는 1차원배열로 사용을 합니다. 그런데 이번에 스프라이트툴과 맵툴을 개발을 하고,
    그툴로 만들어진 맵과 애니메이션을 읽는데에서는 1차원배열로는 하기가 힘들더군요. 그안에 몇개가 들어있는지도알아야하고, 아무튼 파일에서 읽는데 좀 문제가 생기더라구요. 게임구현은 몬스터,주인공,보스,맵,엔피시등 클래스로 다 나누죠.

  • 매디

    모바일 플랫폼이라고 한다면 더더운 2차원 이상의 배열은 사용 하시면 안되요. 정확한 수치는 모르지만 배열 선언시 int로 10개 선언 한다고 40 byte만 딱 생성 되지 않고 좀더 증가 합니다. 다차원 배열일 경우엔 2배 가량 더 메모리를 먹게 되는 것으로 알고 있고요..(wipi 라면 더더욱 증가 됩니다.)

    1차원 배열로도 다차원 배열의 효과를 충분히 만들수 있습니다. int a[4][4] 라고 한다면 int a[4*4] 하시고 메소드로 getI

  • 징징몬

    제가 보기에도.. 복잡한 배열보다는 해당 요소를 가지는 클래스를 만들어 담으시는게
    휠씬 간단할 꺼 같네요..

  • 재넘이

    근데 꼭 배열로 해야하나요?
    제 생각에는 클래스로 해야 하는게 아닌가 생각돼는데요.
    어째튼 의도는 잘 이해가 안가지만 클래스라는 좋은게 있으니 한번 응용해보시는거도 괜챦지 않나 생각됩니다.
    느낌상 C코드를 자바로 고쳐 놓은 느낌이라...

번호 제 목 글쓴이 날짜
2695984 마크업상으로 하단에 있으나 우선적으로 이미지파일을 다운로드받는 방법 (1) 들꿈 2025-05-25
2695934 tr 속성값 (9) 새 2025-05-25
2695905 ASP로 개발됐을 때 css가 달라져요 ㅠㅠ (4) 슬아라 2025-05-24
2695878 form을 이용한 다른 페이지로 넘기는 방법을 알려주세요 (1) 핫파랑 2025-05-24
2695844 저기 암호화 및 복호화 프로그램.. 만들어볼려는대 (2) 한빛 2025-05-24
2695814 [질문] PDA에서 애플릿이 가능한가요? (1) 봄시내 2025-05-24
2695785 웹 설정 도와줄분 화이트캣 2025-05-23
2695730 갑자기 기억이 안나는데 accesskey 속성.. 빛나라 2025-05-23
2695702 [질문] Java 버전 차이에 의한 오류?!! (2) 검사 2025-05-23
2695672 자바 임베디드 쪽으로 배우고 싶은데요..질문이요.. (1) 뽀그리 2025-05-22
2695647 헉! 이클립스(v3.1)에서 발생되는 널포인트 익셉션? ;;; (3) 아빠몬 2025-05-22
2695586 IFRAME 캐싱 질문 봄나비 2025-05-22
2695498 [질문]실행가능한 jar파일.. 정말 이해가 안가네요... ㅡㅜ;; 터1프한렩 2025-05-21
2695468 자바랑 이클립스에서요.. 스킬 2025-05-21
2695375 Mysql 연동하는 자바 질문있습니다. 아리솔 2025-05-20
2695319 파워포인트 파일을 저장할 수 있을까요? 시윤 2025-05-19
2695289 [질문]Tween 값의 정도를 알고 싶습니다. 타마 2025-05-19
2695238 c 와 c++의 시작 (10) ChocoHoilc 2025-05-18
2695215 탑메뉴의 repeat-x .배경이 두가지에요ㅠ ㅠ 널위해 2025-05-18
2695187 자바스크립트와 자바의 import에 관해서 질문드려요 (1) 무슬 2025-05-18
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com