C#:使用堆栈创建方法

标签 c# methods stack

我正在处理一个 C# 项目。我正在尝试创建一种必须使用堆栈的方法。

该项目是关于在指定时间内移动一组飞机。每架飞机的信息都包含在一个名为 FlightPlan 的类中,其中包含:速度、初始位置 (x,y)、最终位置 (x,y)、航空公司...

我创建了这个方法:

public void Move(double time)
    {
        double distance = (time * this.Speed) / 60;
        double hyp = Math.Sqrt( (this.Destination.GetX() - this.Actual.GetX())^2 + (this.Destination.GetY() - this.Actual.GetY())^2 );
        if (hyp < distance)
        {
            this.Actual = this.Destination;
        }
        else
        {
            double cosine = (this.Destination.GetX() - this.Actual.GetX()) / hyp;
            double sine = (this.Destination.GetY() - this.Actual.GetY()) / hyp;
            this.Actual.SetX(this.Actual.GetX() + (distance * cosine));
            this.Actual.SetY(this.Actual.GetY() + (distance * sine));
        }
    }

该方法将飞行器移动到指定时间后到达的位置。

现在,我的问题是:我必须创建一个允许我回到上一个位置的方法(即撤消 Move 方法)。为此,我必须使用堆栈。我真的不习惯使用堆栈,在考虑太多之后我不会做这个方法。

堆栈应该存储每个时间周期后飞行器移动时的所有位置,然后我必须将它们从堆栈中弹出,所以最后到达的位置将是离开堆栈的第一个位置。

你们能帮我写代码吗?尽管它并不准确,因为您不知道创建的所有变量,但我只需要一些提示来说明如何操作。

我认为它应该像这样开始(因为你现在不需要时间)public void MoveBack ()

先谢谢你。

最佳答案

我会提出以下建议。您创建方法 SetPosition,而不是 SetX 和 SetY 函数。然后该函数使用堆栈来保存更改的历史记录。像这样

void SetPosition(double x, double y)
{
    positionHistoryX.Push(x);
    positionHistoryY.Push(y);
    X = x;
    Y = y;
}

然后您可以实现一个名为 MoveToLastPosition() 的方法,该方法从堆栈中弹出 x 和 y 位置并将它们放入 X 和 Y 属性中。

编辑:根据 Zee 的评论,只是想指出最好有一个堆栈来存储有关位置的所有信息,但我没有这样做,因为我没有使用的结构。所以也许你可以做以下事情

struct LocationInfo
{
    double X;
    double Y;
    double Time;
}

然后您可以将 Stack 类型的字段添加到您的类中,并开始在您的 Move 方法中使用它。

关于C#:使用堆栈创建方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27170679/

相关文章:

c# - Activator.CreateInstance() 的麻烦

c# - 在泛型 (Y) 方法中使用泛型 (X) 委托(delegate),其中 Y 扩展了一些基类。无法转换为基类

c# - 如何使用 RestSharp 将请求作为 Xml 发布到 Web API?

java - 使用带有两个 int 参数而不是 int 的 void 方法?

java boolean 方法返回语句

c - 将结构传递给函数的问题

c# - 如何从 C# 代码获取屏幕大小到 XAML?

java - 调用静态方法时是否需要调用单独的方法?

java - 无法从堆栈中弹出项目

gdb - 如何使用 GDB 检查堆栈帧?