자바 기초 문법 2 차원 배열 상세 설명

10643 단어 Java2 차원 배열
1.2 차원 배열
본론 으로 들 어가 기 전에 먼저 여러분 의 이해 에 편리 하도록 제 가 그림 을 하나 그 렸 습 니 다.
xx 총격전 게임 에서 저 는 방금 계 정 을 등록 한 소 백 입 니 다.시스템 은 저 에 게 총 두 자루 를 보 냈 습 니 다.이때 제 무기 고 는 이 층 만 있 습 니 다.(한 배열 로 이해 할 수 있 습 니 다.총 은 대응 하 는 배열 에서 대응 하 는 요소 입 니 다)

어 려 운 전 투 를 통 해 마침내 돈 이 생 겼 습 니 다.지금 은 제 가 배치 할 게임 장 비 를 갖 추 려 고 합 니 다.저 는 지금 총 장 이 하나 있 습 니 다.3 층 의 총 기 를 보관 할 수 있 고 층 마다 무 기 를 여러 개 넣 을 수 있 습 니 다.(이것 이 바로 2 차원 배열 입 니 다.다 층 이 있 고 층 마다 1 차원 배열 입 니 다)

게임 시간 과 나의 뛰어난 기술 에 따라 게임 장 비 를 얻 는 효율 이 점점 높 아 지고 있다.한 개의 총 장 은 이미 저장 할 수 없다.그래서 나 는 여러 개의 총 장 을 가지 게 되 었 다.(이것 이 바로 다 차원 배열 이 고 한 차원 에 보관 하 는 것 은 하나의 2 차원 배열 이 며 한 개의 2 차원 배열 중 여러 개의 1 차원 배열 이 있다.)

위의 그림 은 1 차원 배열 에서 다 차원 배열 로 의 변천~이미지 있 지 않 아 요?하하~
2 차원 배열 의 정의
  • 2 차원 배열 은 본질 적 으로 하나의 배열 이 고 그 내부 에는 여러 개의 1 차원 배열
  • 이 포함 되 어 있다.
  • 2 차원 배열 도 2 차원 표,행*열 로 구 성 된 2 차원 표 로 볼 수 있 는데 이 2 차원 표 에 불과 하고 각 줄 의 열 수 는 다 를 수 있다.그러나 모든 셀 에 있 는 요소 의 데이터 형식 은 일치 합 니 다.예 를 들 어 int 이 고 모두 String 등
  • 입 니 다.
  • 2 차원 배열 의 표시:[][]
  • 2.2 차원 배열 의 성명 과 초기 화
    2.1 성명
  • 2 차원 배열
  • 을 성명 한다.
  • int[][] arr;
  • 문법 서식
    
    //  
           [][]        ;
    //   
                  [][];
    //   
           []      
    예 를 들 어 저 는 추천 하지 않 지만 번역 이상 을 일 으 키 지 않 는 쓰기 방법 을 올 렸 습 니 다.어떤 면접 문 제 는 만 나 고 인상 이 있 으 면 좋 겠 기 때 문 입 니 다.
    2.2 초기 화
  • 초기 화 는 1 차원 배열 과 마찬가지 로 두 가지 방법
  • 이 있다.
    2.2.1 정적 초기 화
    
    //1.   ,      
           [][]      ;
          = new        [][]{
    			{  1,  2,  3 。。。}, 
    			{       },
    			...
    			{ n     }
    		};
    //2.          
           [][]       = new        [][]{
    			{  1,  2,  3 。。。}, 
    			{       },
    			...
    			{ n     }
    		};
    //3.               
           [][]         = {
    			{  1,  2,  3 。。。}, 
    			{       },
    			...
    			{ n     }
    		};
    //      
    int[][] arr;
    //     
    arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
    //arr = new int[3][3]{{1,2,3},{4,5,6},{7,8,9}};//  ,     ,  new     []       
    //        
    int[][] arr = new int
    
    예제 코드 1:
    
    public class Array2Demo1 {
    	public static void main(String[] args) {
    		//    
    		int[][] arr = {{1,2,3},{4,5},{6}};
    		
    		System.out.println(arr);
    		System.out.println(arr[0]);
    		System.out.println(arr[1]);
    		System.out.println(arr[2]);
    		
    		System.out.println(arr[0][0]); //1
    		System.out.println(arr[1][0]); //4
    		System.out.println(arr[2][0]); //6
    		
    		System.out.println(arr[0][1]); //2
    		System.out.println(arr[1][1]); //5
    		//  
    		System.out.println(arr[2][1]); //  
    	}
    }
    
    예제 코드 2:
    
    public class TwoArryTest {
        public static void main(String[] args) {
            //      
            //         MM   
            String[][] girls = new String[][]{ {"     ","     ","     "},{"     ","      "},{"      ","     ","      "} };
             /*
            *            
            *       ,      MM    
            *             MM   ,          ,
            *     ,  ,           ~~
            *   ,                   
            * */
            //               
            System.out.println(girls[0][0]);
            //               
            System.out.println(girls[0][1]);
            //               
            System.out.println(girls[1][0]);
            //               
            System.out.println(girls[2][2]);
        }
    }
    
    2.2.2 동적 초기 화
    동적 초기 화 생 성 은 1 차원 배열 의 길 이 를 설명 하지 않 아 도 됩 니 다.따라서 1 차원 배열 의 길 이 는 다 를 수 있 습 니 다.so 는 다음 과 같은 두 가지 초기 화 방식 이 있 습 니 다.
  • 동적 초기 화 1(규칙 2 차원 표)
  • 프로그래머 가 배열 의 길 이 를 지정 하고 나중에 값 을 부여 합 니 다.(시스템 은 요소 의 기본 초기 값 을 먼저 지정 합 니 다)
    규칙 2 차원 표:각 줄 의 열 수 는 같다.
    격식.
    
    //(1)       
           [][]       = new        [m][n];
    m:                。           
    n:                。             
     
    //       ,  、    ,          
    //(2)       
         [   ][   ] =  ;
    
    예제 코드:
    
    public static void main(String[] args) {
        //        
        int[][] arr = new int[3][2];
        
        //         arr
        //       3        
        //        2   
        //        
        System.out.println(arr); //   	[[I@175078b
        
        //                   
        System.out.println(arr[0]); //   	[I@42552c
        System.out.println(arr[1]); //   	[I@e5bbd6
        System.out.println(arr[2]); //   	[I@8ee016
        
        //         
        System.out.println(arr[0][0]); //0
        System.out.println(arr[0][1]); //0
    }
    
    동적 초기 화 2(불규칙 2 차원 표)
    불규칙 2 차원 표:줄 마다 열 수가 다 를 수 있 습 니 다. 
    격식.
    
    //(1)      
           [][]       = new        [   ][];
    //          ,        null
    //(2)         ,          
         [   ] = new        [      ];
    //    new            ,  new    null
    //(3)      
         [   ][   ] =  ;
    
    불규칙 2 차원 표,성명 후 초기 화 내부 1 차원 배열 시 간략하게 쓸 수 없습니다.
    
    //       
    //       
    int[][] arr = new int[3][]; // 3 ,    
     
    //             
    arr[0] = new int[]{1}; //         arr[0] = {1}
    arr[1] = new int[]{2,3};
    arr[2] = new int[]{4,5,6,7};
    
    예제 코드 1:
    
    public class TwoArryTest {
        public static void main(String[] args) {
            //    
            int[][] arr = new int[3][];
            System.out.println(arr);	//[[I@175078b
            System.out.println(arr[1][0]);//NullPointerException
            System.out.println(arr[0]); //null
            System.out.println(arr[1]); //null
            System.out.println(arr[2]); //null
            //               
            arr[0] = new int[2];
            arr[1] = new int[3];
            arr[2] = new int[1];
            System.out.println(arr[0]); //[I@42552c
            System.out.println(arr[1]); //[I@e5bbd6
            System.out.println(arr[2]); //[I@8ee016
            System.out.println(arr[0][0]); //0
            System.out.println(arr[0][1]); //0
            //ArrayIndexOutOfBoundsException
            //System.out.println(arr[0][2]); //  
            arr[1][0] = 100;
            arr[1][2] = 200;
        }
    }
    
    예제 코드 2:
    
    public class TwoArryTest {
        public static void main(String[] args) {
     
            //      
            /*
            *            ,
            *         ,
            *           ,         ,           
            *        ,                ,  ,            (  )
            * */
            String[][] Guns = new String[3][];
     
            //                   
            String[] GunMagazine = {"AWM","Bird sniper"};
     
            //   ,        ,         
            String[] rifle = {"AK47","M4A1 QBZ95"};
     
            //       ,  ,        ,         
            String[] auxiliaryWeapon = {"(  )pistol","(  )antitank grenade", "(   )smoke bomb"};
        }
    }
    
    주의사항:정적 초기 화 라면 오른쪽 new 데이터 형식[][]에 숫자 를 쓸 수 없습니다.줄 수 와 열 수 는{}요소 개수 에 의 해 결정 되 기 때 문 입 니 다.
    3.2 차원 배열 의 옮 겨 다 니 기
  • 2 차원 배열 의 옮 겨 다 니 는 것 은 1 차원 배열 과 마찬가지 로 차이 점 은 우리 가 먼저 외부 에서 순환 하고 모든 1 차원 배열 을 옮 겨 다 니 는 것 이다.내부 순환 중의 I 는 모든 1 차원 배열 의 메모리 위조 주소
  • 이다.
  • 형식
  • 
    for(int i=0; i<     .length; i++){
        for(int j=0; j<     [i].length; j++){
            System.out.print(     [i][j]);
        }
        System.out.println();
    }
    
    4.2 차원 배열 의 메모리 그림 분석
    2 차원 배열 재 메모리 그림 의 절 차 는 다음 과 같다.

    절차:
    1.먼저 main 방법 을 만 듭 니 다.이 main 방법 은 스 택 메모리 에 존재 합 니 다.(이 메모리 에 있 는 스 택 은 앞에서 언급 한 적 이 있 습 니 다.잊 어 버 려 도 괜 찮 습 니 다.다음 장 에서 다시 공유 하 겠 습 니 다)
    2.정적 초기 화 2 차원 배열 arr 를 만 들 고 스 택 메모리 에 int[][]arr=을 만 듭 니 다. 
    3.스 택 메모리 에 2 차원 배열 int[][]를 만 들 때 안의 값 은 메모리 에 공간 을 엽 니 다.왼쪽 은 2 차원 배열 입 니 다.3 개의 1 차원 배열 이 저장 되 어 있 기 때문에 세 개의 요소 가 있 고 오른쪽 은 각각 3 개의 1 차원 배열 의 메모리 공간 을 엽 니 다.
    4.모든 메모리 공간 에 하나의 주소 가 있 습 니 다.2 차원 배열 에는 1 차원 배열 의 주소 가 저장 되 어 있 고 스 택 메모리 int[][]arr=2 차원 배열 의 메모리 주소 가 저 장 됩 니 다.
    5.그래서 첫 번 째 인쇄 arr 의 2 차원 배열 은 자바 소스 코드 변환 후의 메모리 주소 이 고 두 번 째 는 2 차원 배열 의 첫 번 째 1 차원 배열 의 메모리 주소 이다.
    6.세 번 째 인쇄 는 2 차원 배열 의 첫 번 째 1 차원 배열 의 첫 번 째 요소 이다.
    5.배열 작업 의 흔 한 이상
    배열 경계 이상
    예제 코드:
    
    public static void main(String[] args) {
       int[] arr = {1,2,3};
       System.out.println(arr[3]);
    }
    월경 이상 도

    이상 원인
    배열 을 만 들 고 3 개의 요 소 를 부여 합 니 다.배열 의 색인 은 0,1,2 입 니 다.3 개의 색인 이 없 기 때문에 배열 에 존재 하지 않 는 색인 에 접근 할 수 없습니다.프로그램 이 실 행 된 후에 Array Index Outof Bounds Exception 배열 의 경계 이상 을 던 집 니 다.개발 중 에 배열 의 크로스 오 버 이상 은 나타 날 수 없습니다.일단 나타 나 면 우리 가 작성 한 코드 를 수정 해 야 합 니 다.
    배열 빈 포인터 이상
    예제 코드:
    
     public static void main(String[] args) {
            //    
            int[][] arr = new int[3][];
           
           System.out.println(arr[0][0]);//NullPointerException
       }
    
    빈 포인터 이상 도

    이상 원인
    이상 원인:이 때 배열 의 모든 줄 에 구체 적 인 저장 요소 의 공간 이 할당 되 지 않 았 기 때문에 arr[0]은 null 입 니 다.이때 arr[0][0]을 방문 하면 NullPointer Exception 빈 포인터 이상 을 던 집 니 다.
    총화
    이 장 에 서 는 2 차원 배열 에 관 한 소 개 를 소 개 했 습 니 다.이로써 배열 과 자바 의 기본 적 인 문법 은 끝 났 습 니 다.다음 장 에 서 는 대상 을 대상 으로 하 는 소 개 를 시작 합 니 다.대상 을 대상 으로 하 는 디 테 일이 비교적 많 습 니 다.여전히 이해,이해,사례 를 많이 하 는 것 이 중요 합 니 다.저 는 시간 을 내 서 사례 문 제 를 정리 하여 여러분 들 이 제 글 과 결합 하여 지식 을 공 고 히 하고 누락 된 부분 을 찾 아 보충 할 수 있 도록 하 겠 습 니 다.
    자바 기초 문법 에 관 한 2 차원 배열 의 상세 한 설명 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 2 차원 배열 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기