我是AP计算机科学课程的高中生,周末我们被分配了这个项目:
“在一个正方形的街道网格中模拟一个醉人的徘徊。画一个水平10条街道和10条街道垂直的网格。用点代表模拟的酒鬼,放在网格的中间开始。 100次,模拟酒鬼随机选择一个方向(东,西,北,南),在所选方向上移动一个区块,然后绘制点。迭代后,显示酒鬼所覆盖的距离。可能会期望平均来说这个人可能无法到达任何地方,因为从长远来看,向不同方向的移动会相互抵消,但事实上它可以以概率1显示该人最终移出任何有限区域。“
但是,因为图形不是课程的一部分,所以网格是由Grid类中的循环创建的网格模拟的,而代表醉汉的点是X,例如:
X的默认位置为(5,5),如上所示。但是,我无法让X随机移动。
我的醉汉课程
public class Drunkard
{
int row;
int column;
public Drunkard()
{
row = 5;
column = 5;
}
public int getCol()
{
return column;
}
public int getRow()
{
return row;
}
public void moveRandomly()
{
double directionDeterminer = Math.random();
if (directionDeterminer >= 0 && directionDeterminer <= 0.25)
{
row++;
}
else if (directionDeterminer >= 0.25 && directionDeterminer <= 0.50)
{
row--;
}
else if ( directionDeterminer >= 0.50 && directionDeterminer <= 0.75)
{
column++;
}
else if ( directionDeterminer >= 0.75 && directionDeterminer <= 1.00)
{
column--;
}
}
}
和我的网格类(包含创建网格的循环):
public class Grid
{
public static final int MAX_NUM_ROWS = 10;
public static final int MAX_NUM_COLUMNS = 10;
public Grid()
{
}
public void draw(Drunkard theDrunk)
{
Drunkard drunk = new Drunkard();
drunk.getRow();
int y = drunk.getCol();
String newRow = "- - - - - - - - - - ";
drunk.moveRandomly();
for (int row = 0; row < MAX_NUM_ROWS - 1; row++)
{
if (row == 4)
{
y = 8;
System.out.print( newRow.substring(0,y) + "X " + newRow.substring(10,20) );
System.out.print("\n");
}
for (int column = 0; column < MAX_NUM_COLUMNS ; column++)
{
System.out.print("- ");
}
System.out.print("\n");
}
}
}
方法moveRandomly()应该增加或减少行或列,以便X的位置向北,向南,向东或向西变化。但是,我不确定如何使moveRandomly()(行和列)中的变量对Grid类中创建的网格有任何影响。有没有人知道如何使它变得对网格产生影响?请记住,我是一名初学程序员,因此我对循环和if语句有基本知识,而不是arrrays或图形。任何评论将不胜感激。
答案 0 :(得分:1)
它看起来很不错,我想你可能只想在画中这样的东西:
for(int row = 0; row < MAX_NUM_ROWS - 1; row ++)
{
for(int column = 0; column < MAX_NUM_COLUMNS - 1; column ++)
{
if((row == theDrunk.getRow()) && (column == theDrunk.getCol()))
System.out.print("X");
else
System.out.print("-");
}
System.out.println();
}
这也可以通过子串进行一些修改