C # (снова, снова?) Переменная не сохраняется - PullRequest
0 голосов
/ 20 января 2011

Ух ты, угадай, кто вернулся!Программа запускается (хорра), но теперь переменная не сохраняет значение.основная форма:

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";
    }
}

И почему-то переменнаяиз текстового поля в главной форме переходит в переменную «скорость», но переменная скорости в классе «Самолет» не имеет этой переменной.

Ответы [ 4 ]

2 голосов
/ 20 января 2011

Либо ваш пример не завершен, либо ваш код волшебным образом компилируется.Я предполагаю, что вам нужно реализовать свойство для доступа к скорости, содержащейся в вашем 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 голос
/ 20 января 2011

Вы звоните Ускорение сразу после установки скорости из текстового поля. Поэтому автоматически увеличивая скорость на 1 ... Это не проблема, не так ли? Если нет, можете ли вы предоставить немного больше информации тем, кто не знаком с тем, что вы делаете?

0 голосов
/ 20 января 2011

Ваш класс самолета не имеет атрибута скорости. Как это будет работать ??

Или вы делаете так, как сказал Грег Бюлед, или вы можете попробовать что-то вроде этого:

установить ваш 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();        

}

Это не самый лучший, но и способ.

0 голосов
/ 20 января 2011

В общих чертах, прежде чем мы рассмотрим вашу проблему, взгляните на вашу объектную модель. Является ли скорость действительно атрибутом положения самолета? На самом деле?

Причина, по которой вам нужно сначала разобраться в этом, заключается в том, что, оставив все как есть, вы создадите кучу не поддерживаемого кода, где кодер должен знать, где конкретно все хранится.

Кроме того, максимальная скорость не должна фиксироваться как постоянная величина - кто-то в конечном итоге построит более быстрый самолет и испортит весь ваш день.

Я предлагаю, прежде чем идти дальше, подумайте о рассмотрении подобных вопросов. Если вы работаете с другими учащимися в классе, вам может понравиться рецензирование.

Что касается самой проблемы, вы прошли через код с помощью отладчика? Простое пошаговое выполнение кода за раз может выявить различия между тем, что вы написали, и тем, что вы намеревались написать в то время ...

Вставьте точку останова в btn_Accel_Click - это даже выстрел? Я знаю, ты думаешь, что я саркастичен, но на самом деле я не ... Я пытаюсь тебе помочь. Это именно то, что я бы сделал, прежде чем слишком увязнуть в попытках проанализировать все сам.

Martin.

...