【发布时间】:2013-12-07 11:13:00
【问题描述】:
我是一名 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 语句的基本知识,而不是数组或图形。任何 cmets 将不胜感激。
【问题讨论】:
-
你为什么要这么做
public void draw(Drunkard theDrunk) { Drunkard drunk = new Drunkard();?你想要多少个Drunkard(s)? -
我创建它是希望我可以在 Grid 中使用 Drunkard 类的方法。不过,我只想要 1 个酒鬼。
-
那么就用你传递的
theDrunk来绘制...
标签: java loops if-statement