【问题标题】:Trouble with methods from one class interacting with methods in another class一个类中的方法与另一个类中的方法交互的问题
【发布时间】: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


【解决方案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();
}

这也可以通过对子字符串进行一些修改来完成

【讨论】:

  • 感谢您的意见。我在尝试时看到的问题是 X 没有从 (5,5) 的默认位置开始,它似乎只向右移动,而不是向左移动。是否有可能以某种方式为此添加一个 if 语句,以便第一次循环网格时,它从 (5,5) 开始并从那里移动?
  • 当drink 被创建时:Drunkard 类的构造函数,row 和column 的值设置为5。它们可能应该设置为4,因为行从0 开始而不是1。
  • 再次感谢。另一个问题是,在这种情况下,X 是否有可能脱离电网?我记得我的教练向我们展示了它离开网格但仍在移动的示例,因此它仍然可以移回网格。 X不动是巧合,还是代码有问题?
  • 是的,它可以。 moveRandomly 方法没有边界,因此它应该能够将醉酒者移出网格。我认为这是一个巧合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多