谁猜谁回来了! 程序运行(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
}
“位置”是另一个类:
class Position
{
internal int x_coordinate;
internal int y_coordinate;
internal double speed;
internal int direction;
internal const int MAX_SPEED = 50;
public Position()
{
}
public string displayPosition()
{
return "okay";
}
}
由于某种原因,主窗体中文本框中的变量进入“速度”变量,但Airplane类中的速度变量没有该变量。
答案 0 :(得分:2)
您的示例不完整,或者您的代码是神奇编译的。我猜你需要实现一个属性来访问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
}
}
答案 1 :(得分:1)
从文本框设置速度后,您正在调用“加速”。因此自动将速度提高1 ......这不是问题所在吗?如果没有,你可以为不熟悉你正在做什么的人提供更多的信息吗?
答案 2 :(得分:0)
一般而言,在我们查看您的问题之前,请先查看您的对象模型。速度真的是飞机位置的一个属性吗?真的?
你需要首先解决这个问题的原因是因为,保持原样,你最终会建立一个无法维护的代码,其中编码器必须具体知道所有内容的存储位置。
此外,最高速度不应该固定为一个恒定的值 - 某个地方的人最终会建立一个更快的飞机并毁掉你的一整天。
我建议,在进一步讨论之前,考虑一下这些问题。如果您在课堂上与其他学生一起工作,同行评审可能是您想要考虑的事情。
至于问题本身,您是否通过调试器逐步完成了代码?只需逐步执行代码,通常可以揭示您所编写的内容与您当时要编写的内容之间的差异......
在btn_Accel_Click中粘贴一个断点 - 它甚至会被解雇吗?我知道你认为我是在讽刺,但我真的不是 - 我正在努力帮助你。这正是我在试图分析一切之前陷入困境之前会做的事情。
马丁。
答案 3 :(得分:0)
您的飞机舱没有速度属性。它会如何工作?
或者你像Greg Buehled那样做,或者你可以尝试这样的事情:
将您的PlanePositon设置为公开
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
}
然后在btnAccel_Click事件中更改它。
private void btnAccel_Click(object sender, EventArgs e)
{
lblStatus.Text = plane.speed.ToString();
plane.PlanePosition.speed = double.Parse(txtSpeed.Text);
plane.Accelerate();
lblStatus.Text = plane.PlanePosition.speed.ToString();
}
这不是最好的,但也是一种方式。