Dungeon ArrayList打印不正确。 Zork的游戏

时间:2014-04-09 22:30:07

标签: java constructor

我无法弄明白,我的地牢打印不正确(问题和输出在底部)。这将是一些代码,但这一切都是必要的。

这是地牢构造函数:

public Dungeon ( )
    {
        Random r = new Random();

        int determinedDungeonSize = r.nextInt(10-5) + 5;        
        int weaponRandom = r.nextInt(determinedDungeonSize);

        dungeon = new ArrayList<String>(determinedDungeonSize);

        String cell = ("|____|   ");
        char[] cellArray = cell.toCharArray();

        for(int i=0; i<determinedDungeonSize ;i++)
        {
            int randomProbability = r.nextInt(10000);

            if(randomProbability < 5000)
            {
                cellArray[2] = 'M';
            }

            if(i == weaponRandom)
            {
                if(randomProbability < 5000)
                {
                    cellArray[3] = 'S';
                    cellArray[4] = 'w';
                }
                else
                {
                    cellArray[3] = 'S';
                    cellArray[4] = 't';
                }

            }//end if

            cell = String.valueOf(cellArray);
            dungeon.add(cell);
        }//end for

    }//end Dungeon()
地下城的

toString:

public String toString()
{
    String dungeonString = "";

    for(int i = 0; i < dungeon.size(); i++)
    {
        dungeonString += dungeon.get(i);
    }

    return dungeonString;
}

现在问题就在于此。我正在使用此声明打印驱动程序类中的地牢 - &gt; System.out.print(d.toString());,其中d只是一个用Dungeon d = new Dungeon()创建的Dungeon对象 控制台正在输出(这是一个不好的情况):

|_M__|   |_M__|   |_M__|   |_MSt|   |_MSt|   |_MSt|   |_MSt|

怪物的概率,表示为'M',在单元格中的概率为50/50。武器(棍子('St')或剑('Sw'))存在的概率是每个地下一个武器(在任何给定的地牢中只有一个武器,单元必须是随机的)。构造函数应该做的一切都很好,我不知道这里出了什么问题,我现在已经尝试解决这个问题6个小时了。

编辑:预期输出:| M _ | | 中号 _ | | _ | | _St_ | | 中号 | |的 _ | | 中号 | | ___ |

1 个答案:

答案 0 :(得分:1)

您的问题是,您永远不会将cellArray的价值更新为&#34; new&#34; for循环结束时的单元格。您只需在现有单元格上编写。这意味着如果M出现在第一个单元格中,它将出现在每个单元格中。此外,武器将在第一次出现后出现在每个牢房中。要解决此问题,每次运行for循环时都需要重新初始化cell。只需将初始化移动到循环内部:

    for(int i=0; i<determinedDungeonSize ;i++)
    {
        //just move these to the inside of the loop
        //so they are fresh each time
        String cell = ("|____|   ");
        char[] cellArray = cell.toCharArray();

        int randomProbability = r.nextInt(10000);

        if(randomProbability < 5000)
        {
            cellArray[2] = 'M';
        }

        if(i == weaponRandom)
        {
            if(randomProbability < 5000)//this does mean that if the weapon is in the same room as a monster, it will always be Sw. Consider generating a new random value
            {
                cellArray[3] = 'S';
                cellArray[4] = 'w';
            }
            else
            {
                cellArray[3] = 'S';
                cellArray[4] = 't';
            }

        }//end if

        cell = String.valueOf(cellArray);
        dungeon.add(cell);
    }//end for