在Java中查找网格上的位置和移动方向

时间:2015-04-02 05:17:55

标签: java grid location distance

我有一个测试人员课程,我已经完成了,我只是不确定如何使用我的蓝图来完成这项工作。这就是我要做的事情:

"您存在于无限网格的街道和街道上,其中位置表示为整数(大道,街道)的耦合。你可以使用底片。现在考虑一个醉汉,它在一个十字路口随机选择四个方向中的一个,然后偶然发现到下一个交叉路口做同样的事情,依此类推。写一堂课Drunkard来模拟这种给醉汉的起点。您的醉汉类应该具有醉汉的当前大道(x位置)和当前街道(y位置)作为实例变量。你的类应该有一个名为step( )的方法,它将醉汉移动到下一个随机选择的相邻交叉点。你的类应该有另一个名为fastForward(int steps)的方法,它接受一个整数作为输入(称之为步骤)并从他当前位置移动醉汉步骤交叉点。你的类应该有一个方法getLocation( ),它返回一个表示醉汉的当前位置的字符串。最后,您的班级应该有一个名为howFar( )的方法,该方法使用曼哈顿距离指标报告他开始计算的区块中的酒鬼距离。"

你推荐什么?任何帮助都可以,谢谢。

到目前为止,这是我的蓝图。

java.util.Random;

class Drunkard 
{
    private int avenue;
    private int street;

    Drunkard(int avenue, int street) {
        this.avenue = avenue;
        this.street = street;
    }

    Random rand = new Random();

    void moveUp(){
        this.street -= 1;
    }
    void moveDown(){
        this.street += 1;
    }
    void moveRight(){
        this.avenue += 1;
    }
    void moveLeft(){
        this.avenue -= 1;
    }
    void getLocation(){
        int avenue = parseInt("avenue");
        int street = parseInt("street");
        System.out.println("Location: " + avenue + ", " + street);
    }
    void fastForward(int steps)
    {
        for (int i=0; i < steps.length; i++}{
        }
    }
    void step(){
    }
    void howFar(){
        int distance = Math.abs(x1-x0) + Math.abs(y1-y0);
    }
}

我需要它与这个测试者类对应。

import java.util.Scanner;

public class DrunkardTester {
    public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.println("Please enter the starting avenue integer: ");
    int avenue = input.nextInt();
    System.out.println("Please enter the starting street integer: ");
    int street = input.nextInt();

    // instantiate
    Drunkard jeff = new Drunkard(avenue,street);

     //move 100 intersections
    jeff.fastForward(100);

    //find current location
    String location = jeff.getLocation();

    // get distance from start
    int distance = jeff.howFar();

    System.out.println("Current location: " + location);
    System.out.println("This is " + distance + " blocks from your origin.");

    }
}

1 个答案:

答案 0 :(得分:1)

所以,要跟踪醉汉的起始交叉点,

您必须将实例变量保持为以下内容

private int startAvenue;
private int startStreet;

修改构造函数以存储startAvenue和StartStreet值。

Drunkard(int avenue, int street) {
    this.startAvenue = avenue;
    this.startStreet = street;
}

现在drunkard实例总是有它的起始位置。

现在我们可以专注于步骤方法,

void step(){
    int nextMove = rand.nextInt(3);
    if(nextMove == 0)
      moveUp();
    else if(nextMove == 1)
      moveDown();
    else if(nextMove == 2)
      moveLeft();
    else
      moveRight();
}

在fastForward()中,只需在for循环中调用step()方法

 void fastForward(int steps)
{
    for (int i=0; i < steps.length; i++}{
      step();
    }
}

在howFar()方法中,

int howFar(){
    int distance = Math.abs(startAvenue-avenue) + Math.abs(startStreet-street);
}