2016-08-19 3 views
0

텍스트 파일로 2 차원 배열을 채우려 고합니다.텍스트를 2 차원 배열로 변환

내 텍스트 파일은 다음과 같습니다

####### 
# .# @# 
# # # 
#$##$## 
# # # 
#  # 
####### 

그 게임의 수준을 basicaly. 내 최종 2 차원 배열은 다음과 같이한다

char [][] a = new char [6][6]; 

a[0][0] = #; a[0][1] = #; ... a[0][6] = #; 
a[1][0] = #; a[1][1] = ; a[1][2] = . ; ... a[1][6] = #; 
. 
. 
. 
a[6][0] = #;  . . .  a[6][6] = #; 

내 시도가의 행을 읽어 1D 배열로 변환 2 개 루프와 2 차원 배열을 채우는 것입니다. 그런 다음 그들을 인쇄해야합니다. 스레드에서
예외 : 내가 7

char [][]a = new char [6][7]; 

에 열을 설정하고 행 6

for (int rows=0; rows<6; rows++){ 

에 나는 또한 오류가 될 때

public class pp { 

public static void main (String[] args) { 

char [][]array2d = new char [6][7]; 

In.open("Level2.txt"); 

    while (In.done()){ 

     for (int rows=0; rows<7; rows++){ 

      String string = In.readLine(); 
      char [] array1d = string.toCharArray(); 

       for(int columns=0; columns<7;columns++){ 

        array2d [rows][columns] = array1d [columns]; 
        Out.print(array2d[rows][columns]); 

        }          

      Out.println(); 

     } 

    } 

In.close();}} 

기이은 단지 모든 것을 출력한다 "main"java.lang.ArrayIndexOutofBoundException : 0 at pp.main (pp.java:18)

그게 여기

array2d [rows][columns] = array1d [columns]; 

그리고 나 또한 (코드 도시하지 않음) array2d을 인쇄 할 수 없습니다입니다. 예를 들어 [6] [0]을 얻으려고하면 아무 것도하지 않습니다.

사실 문자로 검색하고 몇 시간 동안 시험해 본 결과, 나를 도와 줄 수 있기를 바랍니다.

+0

'rows'는'0'에서'6'까지 순환하며,'array2d'의 첫 번째 배열은 크기가'6' (마지막 색인은'5')입니다. 이것이 ArrayIndexOutOfBoundsException을 얻는 이유입니다. – Dando18

+0

7 행과 열이 있기 때문에 2 차원 배열을'[7] [7]'로 선언해야합니다.그것은 배열의 마지막 숫자가 아니라 항목의 수에 따라 다르므로'[6] [7]'은 너무 작은 6 * 7 배열 일뿐입니다. – NendoTaka

답변

0

또한 극적으로 당신이

In.readLine(); 

를 호출 할 때 올바르게 문자 배열로 전환하는 문자열에 복용 실현에 의해 루프에 대한 많은 필요하지 코드를 줄일 수 있습니다. 하지만 배열에 직접 설정할 수 있습니다. 위의 주석에 명시된 바와 같이 올바르게 인스턴스화되지 않았습니다. 당신은 그래서 당신이

new char[7][7] 

이 필요하지만 당신은 첫 번째 요소는 계산 말할 호출 할 때 항상 0 그래서 문자 [0] [0] 것 출력의 첫 번째 요소

의 경우 시작, 7 열 7 개 행이 예 :

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
    char[][] x = new char[7][7]; 
    char[] h = "Helpers".toCharArray(); 
    x[0] = h; 
    for (char c : x[0]) System.out.println(c); 
    } 
} 

이 예에서는 전체 배열과 동일한 2D 배열에서 첫 번째 행을 설정합니다. 그래서 여기에서 매우 많은 코드 라인을 사용하지 않고도 문제에 대한 완벽한 해결책을 찾기가 쉽습니다.

+0

알겠습니다. 고마워요. –

1

Java 8 Streams 텍스트 파일에서 2 차원 문자 배열을 만드는 것이 정말 쉽습니다.

char[][] array2d = Files.lines(file.toPath()) 
    .map(String::toCharArray) 
    .toArray(char[][]::new); 

텍스트 파일의 차이점은 2 차원 문자 배열의 크기를 결정합니다.

관련 문제