Architecturas | 이차원 배열 예제

이차원 배열 예제

그런데 표준 함수 Arrays.copyOf()는 단일 단계에서 2D 배열의 전체 복사본을 만들 수 없습니다. 이렇게 하려면 각 행을 별도로 복사해야 합니다. 예를 들어 int의 2차원 배열의 복사본을 만들려면 선언 중에 일반 배열을 초기화하거나 1차원 배열을 말할 수 있으므로 크기를 지정할 필요가 없습니다. 그러나 2D 배열의 경우는 아니지만 선언 중에 요소를 지정하는 경우에도 항상 두 번째 차원을 지정해야 합니다. 몇 가지 예를 들어 이것을 이해해 봅시다 – 다차원 배열에 저장할 수 있는 총 요소 수는 모든 차원의 크기를 곱하여 계산할 수 있습니다. 예를 들어 배열 int x[10][20]는 총(10*20) = 200개의 요소를 저장할 수 있습니다. 마찬가지로 배열 int x[5][10][20]는 총(5*10*20) = 1000개의 요소를 저장할 수 있습니다. 보다 일반적인 2D 어레이 처리의 예로, 매우 잘 알려진 예를 살펴 보자: 존 콘웨이의 삶의 게임, 수학자 존 호튼 콘웨이에 의해 발명 1970. 이 인생의 게임은 정말 게임이 아닙니다 (때로는 자체를 재생하는 « 제로 인승 게임 »이라고불리지만). 그것은 « 2 차원 셀룰러 오토마톤 »입니다. 이것은 단지 명확하고 결정적인 규칙에 따라 시간이 지남에 따라 콘텐츠가 변경되는 셀의 격자임을 의미합니다. Life에서 세포는 « 살아 있는 » 또는 « 죽은 » 두 가지 콘텐츠만 가질 수 있습니다.

2D 배열을 사용하여 그리드를 나타내고 배열의 각 요소는 그리드에서 하나의 셀의 내용을 나타냅니다. 게임에서는 각 셀이 살아 있거나 죽은 것으로 표시되는 초기 그리드가 설정됩니다. 그 후, 게임은 « 자체 재생됩니다. » 그리드는 일련의 시간 단계를 통해 진화합니다. 각 시간 단계에서 그리드의 내용은 간단한 규칙에 따라 이전 시간 단계의 내용에 의해 완전히 결정됩니다: 그리드의 각 셀은 8개의 이웃(가로, 세로 및 대각선)을 보고 그 이웃의 수를 계산합니다. 살아. 그런 다음 다음 다음 단계에서 셀의 상태가 규칙에 의해 결정됩니다: 배열은 선형 순서로 여러 정보 조각을 추적합니다. 그러나 특정 시스템(디지털 이미지, 보드 게임 등)과 관련된 데이터는 두 가지 차원으로 살아 있습니다. 이 데이터를 시각화하려면 다차원 데이터 구조, 즉 다차원 배열이 필요합니다. 2차원 배열은 실제로 배열 배열에 지나지 않습니다(3차원 배열은 배열 배열의 배열배열).

저녁 식사를 생각해 보십시오. 1차원 배열 이름이 배열의 기본 요소(첫 번째 요소)에 대한 포인터로 작동한다는 것을 알고 있으므로 먹는 모든 것의 1차원 목록이 있을 수 있습니다. 그러나 2D 배열의 경우 논리는 약간 다릅니다. 2D 배열을 여러 1차원 배열의 컬렉션으로 간주할 수 있습니다. 가능한 모든 예외는 피할 수 있습니다. 그러나 내 프로그램에서, 나는 실제로 2D 컴퓨터 게임에서 일반적인 뭔가를 – 나는 보드의 왼쪽 가장자리가 오른쪽 가장자리와 하단 가장자리에 상단 가장자리에 부착된 척. 예를 들어 행 0의 셀의 경우 « 위 » 행이 실제로 맨 아래 행인 GRID_SIZE-1이라고 말합니다. 변수를 사용하여 주어진 셀의 위, 아래, 왼쪽 및 오른쪽 위치를 나타냅니다.

코드는 위에 표시된 코드보다 더 간단합니다. 새 보드를 계산하는 전체 방법은 다음과 같습니다.