我有一个测试人员课程,我已经完成了,我只是不确定如何使用我的蓝图来完成这项工作。这就是我要做的事情:
"您存在于无限网格的街道和街道上,其中位置表示为整数(大道,街道)的耦合。你可以使用底片。现在考虑一个醉汉,它在一个十字路口随机选择四个方向中的一个,然后偶然发现到下一个交叉路口做同样的事情,依此类推。写一堂课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.");
}
}
答案 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);
}