如何在 switch case 中使用值?

How to use a value in switch case?

我对 C# 编程还很陌生,所以最近我被指派做一项作业来计算 "AverageSpeed",然后将其与 "maxSpeed" 相匹配。

我对 "maxSpeed" 有疑问,因为无论我输入什么值,我都会得到一个 "You are within the speed limit",我知道我不应该收到这样的消息。我怀疑他们使用的是 "maxSpeed" 的值 0 而不是这种情况下的最大速度。

该程序是关于请求用户提供驾驶员姓名、车辆类型和行驶距离(以分钟为单位),以查明驾驶员是否超过了最大允许速度。

请指教

private void btnSubmit_Click(object sender, EventArgs e)
{
    int minutes = Convert.ToInt32(txtDuration.Text);
    double miles = Convert.ToInt32(txtDistance.Text);
    double hours = minutes / 60;
    double AverageSpeed = GetMPH(hours, miles);

    Object itemSelect = (Object)cboCarType.SelectedItem;
    string carType = itemSelect.ToString();

    int maxSpeed =0;
    switch (carType)
    {
        case "Sedan":
            maxSpeed = 100;
            break;
        case "Wagon":
            maxSpeed = 90;
            MessageBox.Show("Wagon");
            break;
        case "Truck":
            maxSpeed = 50;
            break;
        case "Van":
            maxSpeed = 60;
            break;
        case "Bus":
            maxSpeed = 50;
            break;
        case "Tractor trailer":
            maxSpeed = 30;
            break;
    }

    if (AverageSpeed > maxSpeed)
    {
        MessageBox.Show("You have exceed the maximun speed!");
    }
    else
    {
        MessageBox.Show("You are within the speed limit!");
    }

}

double GetMPH(double miles, double hours) 
{
    double GetMPH = miles / hours;
    return GetMPH;
}

单步执行代码并找出 AverageSpeed 和 maxSpeed 的值是多少。根据您对错误的描述,我怀疑 AverageSpeed 始终为零。

将您的 switch 更改为函数,如下所示:

public int MaxSpeed(string carType) 
{
   switch (carType)
    {
        case "Sedan": return 100;
        case "Wagon": return 90;
        case "Truck": return 50;
        case "Van": return 60;
        case "Bus": return 50
        case "Tractor trailer": return 30;
    }
    return 0;
}

这将允许您单独对函数进行单元测试并证明其有效。

可能是 switch 语句没有将 maxSpeed 更新为所选值。 在switch语句下个断点,看carType的值。

您已完成以下代码:

int minutes = Convert.ToInt32(txtDuration.Text);
double miles = Convert.ToInt32(txtDistance.Text);
double hours = minutes / 60;
double AverageSpeed = GetMPH(hours, miles);

将您的代码替换为以下代码:

double minutes = Convert.ToDouble(txtDuration.Text);
double miles = Convert.ToDouble(txtDistance.Text);
double hours = minutes / 60;
double AverageSpeed = GetMPH(miles, hours);

并确保您在 string carType 中获得正确的选择值。

希望对您有所帮助。

问题出在您的 carType 字符串中,该字符串未正确设置。 将 itemSelect.ToString() 更改为 itemSelect.Text

private void btnSubmit_Click(object sender, EventArgs e)
{

    int minutes = Convert.ToInt32(txtDuration.Text);
    double miles = Convert.ToInt32(txtDistance.Text);
    double hours = minutes / 60;
    double AverageSpeed = GetMPH(miles, hours);

    Object itemSelect = (Object)cboCarType.SelectedItem;
    string carType = itemSelect.Text;

    int maxSpeed =0;
        switch (carType)
        {
            case "Sedan":
                maxSpeed = 100;
                break;
            case "Wagon":
                maxSpeed = 90;
                MessageBox.Show("Wagon");
                break;
            case "Truck":
                maxSpeed = 50;
                break;
            case "Van":
                maxSpeed = 60;
                break;
            case "Bus":
                maxSpeed = 50;
                break;
            case "Tractor trailer":
                maxSpeed = 30;
                break;
        }
         if (AverageSpeed > maxSpeed)
        MessageBox.Show("You have exceed the maximun speed!");
    else
        MessageBox.Show("You are within the speed limit!");

}

double GetMPH(double miles, double hours) 
{
    double GetMPH = miles / hours;
    return GetMPH;
}

更新: 您还可以使用以下代码获取 carType。

//Object itemSelect = (Object)cboCarType.SelectedItem; //Remove this line
string carType = cboCarType.SelectedItem.Text;

并将您的 GetMPH 函数调用更改为 GetMPH(miles, hours)

也许您可以在 switch 语句上方的代码中打印 carType。 例如

MessageBox.Show(车型);

通过这种方式您可以检查 switch 语句是否有效。 例如carType真的是预期的轿车吗?

调试和设置断点当然也是可以的