我有一个家庭作业问题,我可以使用一些帮助。 我有一个探索机器人,我需要创建一个类,我可以命令它移动并返回有关其状态的各种不同的东西。
它的初始速度为5.0单位。我使用了这个速率,并且已经走了一段距离来计算它一直在探索的时间。
我必须创建一种方法,允许用户多次更改费率并仍然计算其行进的时间,每个部分按当时行进的速度计算。
Ex:机器人以5.0的速率移动50个字段,然后20个字段的速率变为6.0,然后80个字段变为2.0。 这些方面的东西。
这是我到目前为止对象类的内容。
private int xcoord, ycoord;
private int identification;
private double rate;
private double traveled;
//Sets up a robot with the given ID number and beginning x and y coordinates
public Robot (int id, int x, int y)
{
identification = id;
xcoord = x;
ycoord = y;
traveled = 0;
rate = 5.0;
}
//Has the robot travel to the set coordinates
public double setDestination (int x, int y)
{
double distance = Math.pow(x - xcoord, 2) + Math.pow(y - ycoord, 2);
traveled += Math.sqrt(distance);
xcoord = x;
ycoord = y;
return traveled;
}
//Gets the time spent travelling
public double getTimeSpent()
{
return traveled/rate;
}
//Sets the rate at which the robot travels
public void setRate(double setrate)
{
rate = setrate;
}
//Returns the ID of the robot
public int getID()
{
return identification;
}
我想我需要更改我的getTimeSpent()方法,但是我不确定如何更改它以便它以每个单独的速率完成旅程的每一段。正如现在设置的那样,它将以最后设定的速率返回整个旅程的时间。
感谢您的帮助。
答案 0 :(得分:0)
你不能做到这一点吗?几乎创建一个实例变量timeSpent
并使用当前行进的距离而不是整个距离更新setDestination
中的实例变量,使用当前费率并将其返回getTimeSpent
private int xcoord, ycoord;
private int identification;
private double rate;
private double traveled;
private double timeSpent;
//Sets up a robot with the given ID number and beginning x and y coordinates
public Robot (int id, int x, int y)
{
identification = id;
xcoord = x;
ycoord = y;
traveled = 0;
rate = 5.0;
}
//Has the robot travel to the set coordinates
public double setDestination (int x, int y)
{
double distance = Math.pow(x - xcoord, 2) + Math.pow(y - ycoord, 2);
traveled += Math.sqrt(distance);
xcoord = x;
ycoord = y;
timeSpent += Math.sqrt(distance)/rate;
return traveled;
}
//Gets the time spent travelling
public double getTimeSpent()
{
return timeSpent;
}
//Sets the rate at which the robot travels
public void setRate(double setrate)
{
rate = setrate;
}
//Returns the ID of the robot
public int getID()
{
return identification;
}
答案 1 :(得分:0)
向班级介绍另一位成员,说travelLog
,这将是一对TravelLogEntry: (rate, distanceTraveledAtRate)
的列表 - 这可能是您必须创建的另一个班级。
这样的事情:
List<TravelLogEntry> travelLog = new ArrayList<TravelLogEntry>();
在setRate()
中,您需要将当前费率和当前费率的距离保存到travelLog
,然后设置新费率:
travelLog.add(new TravelLogEntry(this.rate, this.traveled));
this.rate = newRate;
distance = 0;
在getTimeSpent()
迭代travelLog
并计算每个条目花费的时间,同时在一些临时变量中累计时间:
long totalTimeSpent = 0;
// go throught all the previous rates/distances
for(TravelLogEntry entry: travelLog){
totalTimeSpent += entry.traveled/entry.rate;
}
// and don't forget the current rate:
totalTimeSpent += traveled/rate;
最后totalTimeSpent
将包含机器人行进的总时间,并根据不同的行程速率进行调整。
这应该可以解决问题。
更新:没关系,我猜,@ austin的解决方案更简单。