2016-08-19 13 views
0

2次元配列にテキストファイルを入力しようとしています。テキストを2次元配列に変換する

私のテキストファイルは次のようになります。

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

そのゲームのレベルをbasicaly。私の最後の2Dアレイは、次のようになりなければならない。

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次元配列を埋めるためです。それから私はそれらを印刷する必要があります。

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

奇妙な話、それは唯一私が6

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

から7

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

と行に列を設定したときに、私もエラーになるすべてのものをプリントアウト:スレッドで
例外"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(); 

を呼び出すとき、あなたは正しくchar配列に変わり、文字列に取っていることを実現することによって、ループのための非常に多くを必要としないようにコードを減らすことができます。しかし、それをあなたのアレイに直接設定することができます。上記のコメントのとおり、正しくインスタンス化されていません。あなたは、このようにあなたが

new char[7][7] 

を必要とする。しかし、あなたが最初の要素を数えると言う呼び出すとき常に0だから、CHAR [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); 
    } 
} 

この例では、2次元配列の最初の行をリスト全体と同じに設定しています。だからここからは、非常に多くのコード行を使わなくても、あなたの問題に対する完全な解決策を見つけるのは簡単です。

+0

ありがとうございました。 –

1

Java 8 Streamsテキストファイルから2次元文字配列を作成するのは本当に簡単です。

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

2次元文字配列のサイズは、テキストファイルの違いによって決まります。

関連する問題