如何将带有数组值的私有2d枚举传递给另一个类?

时间:2015-03-02 10:01:23

标签: java arrays parameters

我创建了一个2d枚举的地图变量(某些具有常量类型的切片),实际上我正在努力使它能够以多种方式渲染地图,而无需将特定的渲染方法添加到地图类中,但进入另一个班级。

我现在有一个简单的控制台打印命令,但是当我使用嵌套循环遍历坐标时,我无法通过数组值(打印),但我可以使用这些方法(getHeight( ),getWidth等来自map类)因为它们是公共的,所以不是数组值,因为地图在TiledMap类中是私有的。

我已经尝试过使用'这个'但我不认为我正在使用它,我不明白你如何通过地图数组传递这个'我已经在网上查了一些例子'这个& #39;但我还没有找到任何解决办法。我认为,因为我将地图传递给渲染器,我也可以访问数组值,但我不能。

问题:"表达式的类型必须是数组类型,但它已解析为TiledMap"

public class ConsoleRenderer implements MapRenderer{
@Override
public void render(TiledMap map) {

    //map = TiledMap(this); < attempt at using 'this'

        for (int row = 0; row < map.getWidth(); row++) {
            for (int col = 0; col < map.getHeight(); col++) {

            System.out.print(map[col][row].asChar()); //Problem occurs<<<

            }           
           System.out.println(" ");
        }
}

}

Final class TiledMap implements ITiledMap{


private TerrainType[][] mMap;
private MapRenderer mRenderer;


    public TiledMap(int aWidth, int aHeight, TerrainType aType, ConsoleRenderer Renderer)
    {
        mMap = new TerrainType [aWidth][aHeight];

        for (int x=0; x<aWidth; x++) 
        {
            for (int y=0; y<aHeight; y++)
            {
                mMap[x][y] = aType;
            }
        }

        this.mMap = mMap;

        //sets the method of renderer
        setRenderer(Renderer);

    }

非常感谢任何相关的材料或指示,谢谢。

1 个答案:

答案 0 :(得分:1)

在tilesMap类中你不必使用this.mMap = mMap,因为你还没有在构造函数中创建一个局部变量。你只是使mMap等于它自己。你传递的值是只有当你有一个与全局变量同名的局部变量时,才应该使用this。 在你的ConsoleRenderer类中,你传递一个类TiledMap而不是一个数组。你必须有一个getter来访问你的数组mMap。但是当你传递TiledMap命名映射时,你可以使用它作为一个数组,你可以&#39;我只是像数组一样使用它,因为它只是一个类而不是一个类数组。 为你做一个getter函数array mMap:

public TerrainType[][] getTerrainType(){
return mMap;
}

然后在consoleRenderer中你可以这样做:

map.getTerrainType[][]