2016-08-19 84 views
0

我試圖用文本文件填充2d數組。將文本轉換爲2d數組

我的文本文件看起來像這樣:

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

其basicaly對遊戲的水平。我最後的二維陣列應是這樣的:

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] = #; 

我嘗試讀取該行,將它們轉換成一維數組,並用2個循環填補了二維數組。然後我需要將它們打印出來。

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();}} 

奇怪的是隻打印的一切時,我設置列7

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

,行至6

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

我也成爲了錯誤:
異常螺紋「main」java.lang.ArrayIndexOutofBoundException:0 at pp.main(pp.java:18)

多數民衆贊成在這裏

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

而且我也無法打印array2d出(代碼未顯示)。例如,當我嘗試獲取[6] [0]時,它什麼也不做。

我從字面上尋找和嘗試幾個小時,我希望你能幫助我。

+0

'''循環從'0'到'6',而'array2d'中的第一個數組的大小是'6'(意思是最後一個索引是'5')。這就是爲什麼你得到'ArrayIndexOutOfBoundsException' – Dando18

+0

你的二維數組需要用'[7] [7]'聲明,因爲有七行和一列。它不是由數組中的最後一個數字,而是由項目的數量決定的,所以'[6] [7]'只會是一個太小的6 * 7數組。 – NendoTaka

回答

0

您也可以大大減少你的代碼沒有被意識到,當你調用

In.readLine(); 

你正在服用的,你正確地變成一個字符數組的字符串需要這麼多的循環。但是你可以直接將它設置到你的數組中。正如上面評論所述,沒有正確實例化。您有7列和7行,所以你需要

new char[7][7] 

但是,當你打電話說的第一個元素計數從0開始,所以焦炭[0] [0]將輸出的第一個元素

對於示例

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); 
    } 
} 

因此,在此示例中,我將我的第一行設置爲等於整個列表的二維數組。所以從這裏可以很容易地找到完整的解決方案,而無需使用如此多的代碼。

+0

明白了,謝謝。 –

1

Java 8 Streams使從文本文件創建二維字符數組變得非常簡單。

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

一個區別是你的文本文件將決定二維字符數組的大小。