2017-07-04 15 views
0

自分のゲーム用のマップシステムを作成しています。古い2D配列マップを別のものに置き換えるには、いくつかの段階で私を必要とします。私がやりたいことは、すべての2D arraylistマップをこれらの2D arraylistsのリストに追加することです。しかし、私が見つけにくかったのは、上記のマップを取得したいとき、.getメソッドが正しいデータを与えないということでした。この場合、arraylistの最初の項目を取り出そうとすると、nullになります。したがって、プログラムは私にnullpointerexceptionsを投げた。Java 2D Arraylistを2D arraylistsのリストに追加する

private int[][] mapArray; 
private List<int[][]> maps = new ArrayList<>(); 

    mapArray = new int[][]{ 
    {0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0}, 
    {0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {0, 1, 9, 1, 1, 7, 7, 7, 7, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {7, 7, 7, 7, 5, 8, 8, 8, 4, 6, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 8, 8, 8, 4, 4, 6, 7, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 8, 8, 8, 4, 4, 4, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} 
    }; 
    maps.add(mapArray); 

I SOUT maps.get(0)私は、次を得る:

[[[email protected] 

私は二つのアイテムを持っている場合、それは次のように表示されます:

[[[[email protected], [[[email protected]] 

理想的には、私はこれを次のように追加します:

[[email protected], [email protected]] 

私はちょうどどのようにこれを行うかわかりません。どんな助けもありがとう!
私は明らかに何かを見落としているかもしれませんが、おそらくそうです!そこにあるものを実際の値に - 多くのあなたは(あなたがそれらを印刷しようとすると、何が起こるかである)文字列にマップ(またはマップのリスト)を変換の出力を混乱しているように見える

+0

リストに要素を追加する方法は他にありません。配列に対してtoString()メソッドが返すものを変更することはできません。とにかく、どのようなユーザーにも表示されるべきではありません。 –

答えて

0

を義務づけ

ほとんどのJavaコンテナフォーマットのように、toString()の実装では、それらを印刷しようとすると自動的に呼び出されるため、出力に「配列のように見える」ものがあります。たとえば、2つの文字列を含む配列リストを印刷する場合、次のようになります。[a, b]

配列は実際のオブジェクトではない(「プリミティブ型」)ので、それらの文字列をプリントすると、その型とその型を説明するJavaバイトコードが得られます(理解できればJavaバイトコード)ので、整数の配列は[[email protected]<address>のようになりますが、2次元のバイト配列は[[[email protected]<address>のようになります。

あなたのオリジナルの質問に関しては、コードは私のためにうまくいくようです。ここでは例のプログラムは、次のとおりです。

import java.util.ArrayList; 

public class Test2D { 

    public static void main(String... args) { 
     ArrayList<int[][]> maps = new ArrayList<>(); 
     maps.add(new int[][] { 
      {1,2,3}, 
      {4,5,6}, 
      {7,8,9}, 
     }); 
     maps.add(new int[][] { 
      {10,20,30}, 
      {40,50,60}, 
     }); 
     int[][] map = maps.get(0); 
     System.out.println(map[0][0]); 
    } 
} 

出力には、nullポインタ例外が存在しないことを示す、正しく1を印刷します。

+0

応答をありがとう、私はそれを解決するために管理しました。それは私の側の監視のためだった。配列の1つをリストに追加するのを忘れてしまったので、誤って同じ配列を2回追加しました。これはリストになかった2番目の配列をフェッチしようとしたときにNullpointerExceptionの原因となりました。再度、応答に感謝します。 – Hoaz

関連する問題