从ArrayList获取String返回null

时间:2013-10-17 08:15:48

标签: java arraylist

我有一个带有两个值的Tiles的ArrayList;一个int和一个String。

我需要获得这两个值,所以当我编写代码时,我决定确保它正常工作:

private void setIcons()
    {
        ArrayList<Tiles> tiles = new ArrayList<>();
        tiles = game.getTiles(0);
        Tiles i = tiles.get(0);
        String s = i.returnTileName();
        System.out.println(i.returnTileName() +" ," +i.returnTileNumber());
    }

这是我的Tiles类,它有子类:

public class Tiles
{
    int number;
    String name;

    public Tiles()
    {

    }

    public String returnTileName()
    {
        return name;
    }

    public int returnTileNumber()
    {
        return number;
    }
}

'Tiles'有几个子类,所有子结构几乎相同:

public class Bamboo extends Tiles
{
    int number;
    String name;
    public Bamboo(int number, String name)
    {
        this.number = number;
        this.name = name;
    }
}

当我运行它时,String返回为'null'并且我的int返回为'0',当它们显然有值时,如下图所示。

http://img716.imageshack.us/img716/6154/emx4.jpg

我在setIcons()中调用的方法:

 public ArrayList getTiles(int playerX)
    {
        ArrayList<Tiles> tiles = new ArrayList<>();
        Player pl = player.get(playerX);
        tiles = pl.playerTiles;
        return tiles;
    }

'Game'类中有两个ArrayLists,'tilesDeck',Tiles的ArrayList和'player',类Player的ArrayList。

这是我的游戏课程。之前不知道它有滚动功能。

public class Game
{
    ArrayList<Tiles> tilesDeck = new ArrayList<>();
    ArrayList<Player> player = new ArrayList<>();

    public Game()
    {
        addTile("Bamboo", 1);
        addTile("Bamboo", 2);
        addTile("Bamboo", 3);
        addTile("Bamboo", 4);
        addTile("Bamboo", 5);
        addTile("Bamboo", 6);
        addTile("Bamboo", 7);
        addTile("Bamboo", 8);
        addTile("Bamboo", 9);

        addTile("Circles", 1);
        addTile("Circles", 2);
        addTile("Circles", 3);
        addTile("Circles", 4);
        addTile("Circles", 5);
        addTile("Circles", 6);
        addTile("Circles", 7);
        addTile("Circles", 8);
        addTile("Circles", 9);

        addTile("Characters", 1);
        addTile("Characters", 2);
        addTile("Characters", 3);
        addTile("Characters", 4);
        addTile("Characters", 5);
        addTile("Characters", 6);
        addTile("Characters", 7);
        addTile("Characters", 8);
        addTile("Characters", 9);

        addTile("Dragons", 1);
        addTile("Winds", 1);

        Collections.shuffle(tilesDeck);
        player.add(new Player("Player 1"));
        player.add(new Player("Player 2"));
        player.add(new Player("Player 3"));
        player.add(new Player("Player 4"));

        startTiles();
    }

    private void addTile(String name, int number)
    {
        int counter = 0;
        if (name.contains("Bamboo"))
        {
            while (counter < 4)
            {
                tilesDeck.add(new Bamboo(number, name));
                counter++;
            }
        }

        if (name.contains("Circles"))
        {
             while (counter < 4)
            {
                tilesDeck.add(new Circles(number, name));
                counter++;
            }
        }

        if (name.contains("Characters"))
        {
             while (counter < 4)
            {
                tilesDeck.add(new Characters(number, name));
                counter++;
            }
        }

        if (name.contains("Winds"))
        {
             while (counter < 4)
            {
                tilesDeck.add(new Winds("East"));
                tilesDeck.add(new Winds("South"));
                tilesDeck.add(new Winds("West"));
                tilesDeck.add(new Winds("North"));
                counter++;
            }
        }

        if (name.contains("Dragons"))
        {
             while (counter < 4)
            {
                tilesDeck.add(new Dragons("Red"));
                tilesDeck.add(new Dragons("Green"));
                tilesDeck.add(new Dragons("White"));
                counter++;
            }
        }
    }

    private void startTiles()
    {
        int playerCounter = 0;

        while (playerCounter < 4)
        {
            Player pl = player.get(playerCounter);
            int counter = 0;
            while (counter <13)
            {
                pl.playerTiles.add(tilesDeck.get(0));
                tilesDeck.remove(0);
                counter++;
            }
            playerCounter++;
        }
    }

    public ArrayList getTiles(int playerX)
    {
        ArrayList<Tiles> tiles = new ArrayList<>();
        Player pl = player.get(playerX);
        tiles = pl.playerTiles;
        return tiles;
    }
}

4 个答案:

答案 0 :(得分:1)

问题是您的子类正在创建重复的数字和名称变量:

public class Bamboo extends Tiles
{
    int number; // <-- remove this
    String name; // <-- and this
    public Bamboo(int number, String name)
    {
        this.number = number;
        this.name = name;
    }
}

Class Bamboo正在初始化重复的数字和名称变量,但returnTileName()returnTileNumber()方法正在从Tiles超类返回未初始化的变量。

答案 1 :(得分:0)

public Tiles()
{

}

在里面初始化你的变量。

答案 2 :(得分:0)

使用某个默认值初始化变量,以避免获取空值。

public class Tiles
{
// assign your default values
int number = 1;           
String name = "default name";

public Tiles()
{

}

public String returnTileName()
{
    return name;
}

public int returnTileNumber()
{
    return number;
}
}

答案 3 :(得分:0)

您必须在构造函数中初始化变量