我无法弄明白,我的地牢打印不正确(问题和输出在底部)。这将是一些代码,但这一切都是必要的。
这是地牢构造函数:
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_ | | 中号 | |的 的 _ | | 中号 | | ___ |
答案 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