C#(再次,再次?)变量未保存

C#(再次,再次?)变量未保存,c#,visual-studio-2008,C#,Visual Studio 2008,哇,猜猜谁回来了! 程序运行(horrah),但现在变量没有保存值。 主要形式: Airplane plane = new Airplane(); private void btnAccel_Click(object sender, EventArgs e) { lblStatus.Text = plane.speed.ToString(); plane.speed = double.Parse(txtSpeed.Text); plane.Accelerate(

哇,猜猜谁回来了! 程序运行(horrah),但现在变量没有保存值。 主要形式:

Airplane plane = new Airplane();    

private void btnAccel_Click(object sender, EventArgs e)
{
    lblStatus.Text = plane.speed.ToString();
    plane.speed = double.Parse(txtSpeed.Text);
    plane.Accelerate();
    lblStatus.Text = plane.speed.ToString();        

}
从飞机上看:

class Airplane
{
    private string name{get; set;}
    private Position PlanePosition;
    private static int numberCreated;

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }

出于某种原因,主窗体中文本框中的变量变为“速度”变量,但飞机类中的速度变量没有该变量。

在文本框中设置速度后,您正在调用Accelerate。因此,自动将速度提高1。。。这不是问题,是吗?如果没有,您能否为那些不熟悉您正在做的事情的人提供更多的信息?

您在文本框中设置速度后立即调用Accelerate。因此,自动将速度提高1。。。这不是问题,是吗?如果没有,你能为那些不熟悉你所做的事情的人提供更多的信息吗?

要么你的示例不完整,要么你的代码正在神奇地编译。我猜您需要实现一个属性来访问
PlanePosition
实例中包含的速度

class Airplane
{
    private string name{get; set;}
    private Position PlanePosition;
    private static int numberCreated;

    public double speed
    {
        get { PlanePosition.Speed = value; }
        set { return PlanePosition.speed; }
    }

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }
}
级飞机
{
私有字符串名称{get;set;}
私人职位;
创建私有静态整数;
公共双速
{
获取{PlanePosition.Speed=value;}
设置{return PlanePosition.speed;}
}
公共飞机()
{
this.PlanePosition=新位置();
}
公共图书馆
{
//提高飞机的速度
if(平面位置速度<位置最大速度)
{
PlanePosition.speed+=1;//或speed+=1;
}//if结束
numberCreated++;//每次创建飞机对象时递增numberCreated
}
}

要么您的示例不完整,要么您的代码正在神奇地编译。我猜您需要实现一个属性来访问
PlanePosition
实例中包含的速度

class Airplane
{
    private string name{get; set;}
    private Position PlanePosition;
    private static int numberCreated;

    public double speed
    {
        get { PlanePosition.Speed = value; }
        set { return PlanePosition.speed; }
    }

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }
}
级飞机
{
私有字符串名称{get;set;}
私人职位;
创建私有静态整数;
公共双速
{
获取{PlanePosition.Speed=value;}
设置{return PlanePosition.speed;}
}
公共飞机()
{
this.PlanePosition=新位置();
}
公共图书馆
{
//提高飞机的速度
if(平面位置速度<位置最大速度)
{
PlanePosition.speed+=1;//或speed+=1;
}//if结束
numberCreated++;//每次创建飞机对象时递增numberCreated
}
}

一般来说,在我们研究您的问题之前,先看看您的对象模型。速度真的是飞机位置的属性吗?真的吗

您需要首先对其进行分类的原因是,尽管如此,您最终将构建一堆无法维护的代码,编码人员必须明确知道所有内容的存储位置

此外,最大速度不应该固定为一个常数——某个地方的某个人最终会制造一架速度更快的飞机,毁了你一整天的时间

在进一步讨论之前,我建议您考虑一下这些问题。如果你在课堂上和其他学生一起工作,同行评议可能是你想考虑的事情。 至于问题本身,您是否已使用调试器逐步完成了代码?只需一次一行地编写代码,就可以发现您编写的代码与您当时打算编写的代码之间的差异

在btn\u Accel\u Click中粘贴一个断点-它是否均匀触发?我知道你认为我在挖苦人,但我真的没有,我是想帮你。这正是我在陷入自我分析的困境之前所要做的


Martin。

一般来说,在我们研究您的问题之前,先看看您的对象模型。速度真的是飞机位置的属性吗?真的吗

您需要首先对其进行分类的原因是,尽管如此,您最终将构建一堆无法维护的代码,编码人员必须明确知道所有内容的存储位置

此外,最大速度不应该固定为一个常数——某个地方的某个人最终会制造一架速度更快的飞机,毁了你一整天的时间

在进一步讨论之前,我建议您考虑一下这些问题。如果你在课堂上和其他学生一起工作,同行评议可能是你想考虑的事情。 至于问题本身,您是否已使用调试器逐步完成了代码?只需一次一行地编写代码,就可以发现您编写的代码与您当时打算编写的代码之间的差异

在btn\u Accel\u Click中粘贴一个断点-它是否均匀触发?我知道你认为我在挖苦人,但我真的没有,我是想帮你。这正是我在陷入自我分析的困境之前所要做的


马丁。

你的飞机级别没有速射。它将如何工作

或者你做的像Greg Buehled aswered一样,或者你可以试试这样的东西:

将您的PlanePosition设置为公共

class Airplane
{
    private string name{get; set;}
    public Position PlanePosition;
    private static int numberCreated;

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }

这不是最好的,但也是一种方式。

你的飞机级别没有速度调节器。它将如何工作

或者你做的像Greg Buehled aswered一样,或者你可以试试这样的东西:

将您的PlanePosition设置为公共

class Airplane
{
    private string name{get; set;}
    public Position PlanePosition;
    private static int numberCreated;

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }

这不是最好的,但也是一种方式。

什么是
飞机。速度
?我看到你分配给它,但我看不到它存储在哪里或使用在哪里。我在
飞机上看不到
速度
属性或字段。同样,我觉得奇怪的是
位置
包含速度字段。我想<代码>位置<代码>是一个坐标和(也许)一个标题。只是一个注释——你可以考虑用向量或矩阵替换离散的x/y坐标、速度和加速度,