2012-07-06 4 views
2

Java에서 배열을 처리하는 방법에 대한 간단한 질문이 있습니다. 내가 루프가 두 차원의 값을 출력하는 "를"당신이 배를 만들 필요가 있음을 이해하고 당신이 가진 것을 가지고Java에서 배열 인덱싱 이해

//import java.util.Arrays; 
import static java.lang.System.out; 

public class Arrays 
{  
    public static void main(String[] args) 
    {   
     String [][] multiArray = new String[10][8]; 

     int k = 1; 
     while (k <= 61) {out.print('-'); k++;} 
     out.println(); 

     for (int i = 0; i < multiArray.length; i++) 
     { 
      for (int j = 0; j < multiArray[i].length; j++) 
      { 
       multiArray[i][j] = i + "" + j; 
       out.print ("| " + multiArray[i][j] + " "); 
      } 
      out.println ("|"); 
     }   
     k = 1; 
     while (k <= 61) {out.print('-'); k++;} 
     out.println();   
    }  
} 

: 그래서 알고

multiArray[i].length 

을 아래에 내 코드입니다 두 번째 차원의 길이를 참조하십시오. 나는 그것이 어떻게 작동하는지 이해하지 못한다.

내가 대한 혼란 스러워요하면이입니다 : 내가 좋아하는 성명을 쓰면 내가, 내 배열을 선언 프로그램의 시작에서, 직접 후 : 그것은 10의 값을 출력합니다

system.out.println (multiArray.length);  

을, 이것은 첫 번째 차원에서 선언 한 길이입니다. 나는, 그러나, "INT의 A = 0"또는 "INT idontgetthis = 0"다음과 같은 몇 가지 확률 변수를 만들 경우 나는 쓰기 :

system.out.println (multiArray[a].length); 

어떻게 든 그래서, 두 번째 차원의 8 길이를 인쇄 알고 내 질문은, 어떻게 이것을하는 지 어떻게 알 수 있습니까? 그것 때문에 죽겠다!! lol

답변

5

multiArray은 실제로 배열의 배열이기 때문에. 따라서 multiArray[a]은 개체에 대한 참조입니다. 그 객체 자체는 배열입니다. 그 배열은 길이 (8)를 가지고 있으며 그 길이를 되 돌리는 데 사용할 수있는 length이라는 속성이 있습니다.

+0

배열 배열? Gaahhhh LOL 이해하기 위해 최선을 다하고 있습니다. 성급한 반응에 감사드립니다! –

0

기본적으로, 개념의 혼란이 일을함으로써, :

String[] array;

당신이 당신이 알 수없는 아이폰에와 문자열의 배열을해야합니다를 선언한다.
array이 아직 으로 초기화되지 않았으므로이 시점에서 System.out.println(array.length)에 대한 호출이 컴파일 오류와 함께 실패합니다 (따라서 컴파일러는 얼마나 오래인지 알 수 없습니다). 이렇게함으로써

는 :

String[] array = new String[8]

당신이 가지고 문자열의 배열과 가 8 문자열을위한 공간이있을 것이다 지정에게 초기화됩니다 선언, 컴파일러는 다음이 8 문자열을위한 공간을 할당 . 알아둬야 할 중요한 점은 컴파일러가 배열에 8 개의 문자열을 저장한다는 것을 알았더라도 8 개의 null로 채울 것입니다.

따라서이 시점에서 System.out.println(array.length)을 호출하면 8이 반환되지만 컴파일러가 System.out.println(array[1])을 호출하면 Null Pointer Exception (null이 8 개 있음)이 반환됩니다.

이제 제시 한 예제에서 양방향 배열을 선언합니다.이 배열은 다른 배열을 포함 할 배열입니다.

Bidimensional 배열 String[][] multiarray = new String[10][8];로 초기화되며, 로직은이 new String[10][8]; 다른 어레이를 포함하는 어레이의 아이폰에를 나타내는 간단한 어레이와 마찬가지이며, new String[10][8]; 포함 된 배열의 길이를 나타냅니다.

다중 배열을 초기화 한 후 system.out.println(multiArray[x].length);을 수행하면 "초기화 된 덕분에 컴파일러가 포함 된 배열의 길이가 얼마입니까?"로 번역됩니다. 현재 nulls 중.

희망 사항을 추가하면 도움이됩니다.

+1

아 하아아! 아직 명확하지는 않지만 확실히 이해하기 시작합니다. FORTRAN과 C가 "x, y"쌍으로 저장하는 방식을 배열에 대해 생각하는 데 익숙해 보입니다. 그것은 더 이해하기 쉬운 나에게 그것에 대해 생각하는 좀 더 수학적인 방법이지만, 오 잘. 고맙습니다! –

0

당신은 이것을 이렇게 시험해 볼 수 있습니다.

public class Arrays{ 
    public static class EightStrings { 
    public String[] strings = new String[8]; 
    } 
    EightStrings[] tenOfThem = new EightStrings[10]; 
}