大于最高速度。为什么你的速度是ints?您的描述称之为“十进制”,但C#decimal类型用于定点值浮动是一个更好的选择

大于最高速度。为什么你的速度是ints?您的描述称之为“十进制”,但C#decimal类型用于定点值浮动是一个更好的选择,c#,C#,您的问题是“加速将改变速度…添加到当前速度…当前速度永远不能超过最高速度或小于0”。这样做: public void Accelerate(float changeSpeed) { var predictedSpeed = CurrentSpeed + changeSpeed; if (predictedSpeed > TopSpeed) CurrentSpeed = TopSpeed; else if (predictedSpeed < 0)

您的问题是“加速将改变速度…添加到当前速度…当前速度永远不能超过最高速度或小于0”。这样做:

public void Accelerate(float changeSpeed)
{
    var predictedSpeed = CurrentSpeed + changeSpeed;
    if (predictedSpeed > TopSpeed)
        CurrentSpeed = TopSpeed;
    else if (predictedSpeed < 0)
        CurrentSpeed = 0;
    else
        CurrentSpeed = predictedSpeed;
}
同样,您允许任何东西破坏您的数据。不要那样做;如果需要创建新车,请创建
新车
。如果你不想展示一辆车,不要创建一辆


您的
carSpeedForm也有问题,但我看到米高梅正在解决这些问题。

是的,有道理,谢谢米高梅。正确,文本框将允许输入几乎任何内容。我认为需要保存对象_myCar,因此如果您不更改车辆模型,但继续操纵速度,则不应收到“新车”信息。如果模型名称更改为其他名称,则应显示“这是一辆新车”消息。@Heavy我添加了视图的快速实现。我想你可以在汽车对象中推断出我的界面。感谢你的帮助。无论如何,不要让任何人做我的家庭作业。事实上,我喜欢这场苦读,所以如果这篇文章发错了,我很抱歉。晚安:)
public partial class carSpeedForm : Form
{
    private Car _myCar;
    private int SpeedResult;

    public carSpeedForm()
    {
        _myCar = new Car();
        InitializeComponent();
    }

    private void carSpeedForm_Load(object sender, EventArgs e)
    {
        //  Loads Amount ComboBox with values from 60 to 200 in increments of 10
        for (int i = 60; i <= 200; i += 10)
            topSpeedComboBox.Items.Add(i);
        //  Loads Amount ComboBox with values from 1 to 200 in increments of 1
        for (int i = 1; i <= 200; i += 1)
            changeSpeedComboBox.Items.Add(i); 
    }

    private void GetCarData()
    {
        try
        {
            _myCar.Model = carModelTextBox.Text;
            _myCar.TopSpeed = int.Parse(topSpeedComboBox.Text);
            _myCar.CurrentSpeed = int.Parse(changeSpeedComboBox.Text);
        }
        catch
        {
            MessageBox.Show(string.Concat("Please enter a valid model and speed(s) for vehicle.","\r\n"));
        }
    }

    private void accelButton_Click(object sender, EventArgs e)
    {
        GetCarData();
        speedResultLabel.Text = SpeedResult.ToString("n1");
        carResultLabel.Text = String.Format("Your car is a new car.");
    }

    private void decelButton_Click(object sender, EventArgs e)
    {
        GetCarData();
        speedResultLabel.Text = SpeedResult.ToString("n1");
        carResultLabel.Text = String.Format("Your car is a new car.");
    }

    private void clearButton_Click(object sender, EventArgs e)
    {
        //Clear textbox, combobox, labels
        carModelTextBox.Clear();
        carModelTextBox.Focus();
        topSpeedComboBox.SelectedIndex = -1;
        changeSpeedComboBox.SelectedIndex = -1;
        speedResultLabel.Text = "";
        carResultLabel.Text = "";
    }

    private void exitButton_Click(object sender, EventArgs e)
    {
        //Close application
        this.Close();
    }
}
public partial class CarForm : Form
{
    private Car theCar;
    private bool modelChanged;
    public CarForm()
    {
        theCar = new Car();
        InitializeComponent();
        loadChangeSpeed_cb();
        loadTopSpeed_cb();
        modelChanged = false;
    }

    private void loadChangeSpeed_cb()
    {
        for (decimal i = 1; i <= 200; i++)
        {
            changeSpeed_cb.Items.Add(i);
        }
    }

    private void loadTopSpeed_cb()
    {
        for(decimal i = 60; i <= 200; i+=10)
        {
            topSpeed_cb.Items.Add(i);
        }
    }

    private void accel_b_Click(object sender, EventArgs e)
    {
        if(modelChanged)
        {
            theCar.CurrentSpeed = theCar.ChangeSpeed;
            modelChanged = false;
        }
        else
        {
            var si = changeSpeed_cb.SelectedItem;
            if (si == null)
            {
                return;
            }

            theCar.Accelerate((decimal)si);
        }
    }

    private void decel_b_Click(object sender, EventArgs e)
    {
        if(modelChanged)
        {
            theCar.CurrentSpeed = 0;
            modelChanged = false;
            return;
        }
        else
        {
            var si = changeSpeed_cb.SelectedItem;
            if (si == null)
            {
                return;
            }

            theCar.Accelerate(-(decimal)si);
        }
    }

    private void topSpeed_cb_SelectedIndexChanged(object sender, EventArgs e)
    {
        var si = topSpeed_cb.SelectedItem;
        if(si == null)
        {
            return;
        }

        theCar.TopSpeed = (decimal)si;
    }

    private void changeSpeed_cb_SelectedIndexChanged(object sender, EventArgs e)
    {
        var si = changeSpeed_cb.SelectedItem;
        if (si == null)
        {
            return;
        }

        theCar.ChangeSpeed = (decimal)changeSpeed_cb.SelectedItem;
    }
// Backing Fields (Instance Variables)
private string _model;

// Model Property
public string Model
{
    get { return _model; }
    set { _model = value; }
}
public string ModelName { get; private set; }
public int SpeedResult;
// Set Parameters
public Car()
{
    this.Model = "";
    this.CurrentSpeed = 0;
    this.TopSpeed = 0;
}
    _myCar = new Car();
public Car(string modelName, float topSpeed)
{
    if (string.IsNullOrWhiteSpace(modelName)) throw new ArgumentNullException("modelName");
    ModelName = modelName;
    TopSpeed = topSpeed;
}
public int Accelerate()
{
    SpeedResult = (TopSpeed + CurrentSpeed);  
    return SpeedResult;
}
public void Accelerate(float changeSpeed)
{
    var predictedSpeed = CurrentSpeed + changeSpeed;
    if (predictedSpeed > TopSpeed)
        CurrentSpeed = TopSpeed;
    else if (predictedSpeed < 0)
        CurrentSpeed = 0;
    else
        CurrentSpeed = predictedSpeed;
}
public void clear()
{
    Model = "";
    CurrentSpeed = 0;
    TopSpeed = 0;
}