2017-06-24 10 views
0

私はかなり新しいJavaです。私は自分のクラスのテキストベースのゲームを作ろうとしています。 私が知っているのは、2次元配列を作るときには、その内容が日付型でなければならないということです。同様に、Int [] [] array = new int [3] [3]。これで、この2D配列には整数しか格納できません。しかし、私は自分のゲームのためにタイル/マップを作りたいと思っています。私は別のタイプのオブジェクトを生成し、私は自分のゲームマップを持つことができるように2D配列に格納したいと思います。たとえば、1列目のColumn 8にCatオブジェクトを格納し、次に1列目のColumn 2などにFoodオブジェクトを格納したいとします。 これを実行しようとしました。単純化のために擬似コード。ゲームのために異なるオブジェクトの2D配列を作成する方法

Object[][] objectlist = new Object[6][10]; 
objectlist[0][8] = new Cat("Black"); 
objectlist[0][2] = new Food("Tuna"); 

次に、クラスメソッドを呼び出すときはいつでも。

System.out.println(objectlist[0][8].getColor()); 
System.out.println(objectlist[0][2].getFood()); 

私はこれがあまりにも基本的であれば私を許してください、しかし、私が言ったように、私はjavaに新しいです。 とにかく、最初は地図/タイルを作ればこれが私の考えだったのです。 この方法や他の方法の方が良い解決策があれば、私は喜んであなたの意見を聞いています。あなたはあなたがオブジェクトのインスタンスであるかどうかをテストするinstanceof演算子を使用することができ、あなたのオブジェクトと使用方法

System.out.println(((Cat)objectlist[0][8]).getColor()); 
System.out.println(((Food)objectlist[0][2]).getFood()); 

をに従って

キャストをダウンキャストする必要があるので、

+0

なぜC++を追加しますか、ランダムタグを追加しないでください、ありがとうございます。 – Stargateur

+0

@Stargateur申し訳ありません!私はちょうど提案されたタグにあったものをクリックした。私の悪い。 – BWB

答えて

0

getColor()またはgetFood()方法はObjectクラスではなく、指定された型(クラスまたはサブクラスまたはインタフェース)の

0

適切なクラスオブジェクトへのキャストが必要です。オブジェクトがキャストされる前にそのクラスのインスタンスであるかどうかを確認する方が良いでしょう。

if (objectlist[0][8] instanceof Cat) { 
    System.out.println(((Cat)objectlist[0][8]).getColor()); 
} 
1

あなたは、この2次元配列で表される各エンティティのオブジェクトのジェネリック型をしたいので、あなたがやっているとして、あなたは、オブジェクトを使用することができます。しかし、これは、クラスに特有のプロパティを必要とするたびにキャストする必要があることを意味します。

オブジェクトが同じ配列に格納されていて、共通の動作がある場合は、インターフェイスを使用しないでください。

public interface Entity { 
    public String behavior(); 
} 

public class Cat implements Entity{ 
    public String getColor() { 
    // something to do 
    } 

    public String behavior() { 
     getColor(); 
    } 
} 

public class Food implements Entity{ 
    public String getFood() { 
    // something to do 
    } 

    public String behavior() { 
     getFood(); 
    } 
} 

そして、あなたは

Entity entities[][] = new Entity[6][10]; 
entities[0][2] = new Food(); 
entities[0][8] = new Cat(); 

として、あなたの配列を定義し、

System.out.println(entities[0][2].behavior()); 
System.out.println(entities[0][8].behavior()); 

のように必要に応じませ鋳造、およびそれぞれに呼び出される必要があるかの方法を知ってする必要はありませんが、それを印刷することはできませんオブジェクト。

関連する問題