Преобразователь расстояния C # - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю над приложением C # Forms для преобразователя расстояния, и этот код у меня есть сейчас, мне нужно объявить toDistance, но я не слишком уверен, как объявить его с результатами преобразования расстояния.Пожалуйста, помогите, если можете, я довольно новичок в этом

private void btnConvert_Click(object sender, EventArgs e)
{
    float fromDistance;
    float toDistance;

    fromDistance = int.Parse(distanceinput.Text);
    string measureInput = fromList.Items[fromList.SelectedIndex].ToString();
    string measureOutput = toList.Items[toList.SelectedIndex].ToString();
    distanceOutput.Text = toDistance.ToString();

    switch (measureInput)
    {
        case "Yard":
            switch (measureOutput)
            {
                case "Yard":
                    toDistance = fromDistance;
                    break;
                case "Foot":
                    toDistance = fromDistance * 3;
                    break;
                case "Inches":
                    toDistance = fromDistance * 3 * 12;
                    break;
            }
            break;
        case "Foot":
            switch (measureOutput)
            {
                case "Foot":
                    toDistance = fromDistance;
                    break;
                case "Yard":
                    toDistance = fromDistance / 3;
                    break;
                case "Inch":
                    toDistance = fromDistance * 12;
                    break;
            }
            break;
        case "Inch":
            switch (measureOutput)
            {
                case "Inch":
                    toDistance = fromDistance;
                    break;
                case "Foot":
                    toDistance = fromDistance / 12;
                    break;
                case "Yards":
                    toDistance = fromDistance / (3 * 12);
                    break;
            }
            break;
    }
}

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Эта строка:

distanceOutput.Text = toDistance.ToString();

означает , а не означает: «Текст элемента управления distanceOutput всегда должен следовать за« ToString »toDistance».

Скорее это означает «сделай это прямо сейчас » (как в момент, когда эта строка выполнена).Это не сохраняет отношения.

Таким образом, решение состоит в том, чтобы переместить эту строку после (внешнего) оператора switch, где вы вычисляете это toDistance.

Однако вывероятно, нужно его инициализировать (float toDistance = 0f;), иначе компилятор жалуется, что вы пытаетесь использовать неинициализированную переменную.Он не может видеть, что вы использовали все возможные значения в ваших switch es.

0 голосов
/ 07 февраля 2019

Вам необходимо переместить ваш окончательный оператор присваивания после переключателя.

Кроме того, я бы не использовал вложенный переключатель.Трудно читать и отлаживать.Я бы преобразовал ввод в наименьшую возможную единицу (в вашем случае, дюймы).Затем я бы преобразовал наименьшую единицу измерения в любую единицу вывода, которую запрашивал пользователь:

float inputInches = 0;

//Convert input to inches
switch(measureInput)
{
    case "Yard":
        inputInches = fromDistance * 3 * 12;
        break;
    case "Foot":
        inputInches = fromDistance * 12;
        break;
    default:
        inputInches = fromDistance;
        break;
}

//Convert output to desired format
switch(measureOutput)
{
    case "Yard":
        toDistance = inputInches / 3 / 12;
        break;
    case "Foot":
        toDistance = inputInches / 12;
        break;
    default:
        toDistance = inputInches;
        break;
}

distanceOutput.Text = toDistance.ToString();

Несколько дополнительных моментов, на которые следует обратить внимание:

  • Сравнения текстов являются грязными.Попробуйте создать enum с типами ввода (Inch, Foot, Yard и т. Д.).
  • Кодирование в событии Button также является грязным.Попробуйте перевести этот код преобразования в собственный метод.
0 голосов
/ 07 февраля 2019

Вы пытались переместить distanceOutput.Text = toDistance.ToString ();до конца функции?

 private void btnConvert_Click(object sender, EventArgs e)
        {
            float fromDistance;
            float toDistance;

            fromDistance = int.Parse(distanceinput.Text);
            string measureInput = fromList.Items[fromList.SelectedIndex].ToString();
            string measureOutput = toList.Items[toList.SelectedIndex].ToString();


            switch (measureInput)
            {
                case "Yard":
                    switch (measureOutput)
                    {
                        case "Yard":
                            toDistance = fromDistance;
                            break;
                        case "Foot":
                            toDistance = fromDistance * 3;
                            break;
                        case "Inches":
                            toDistance = fromDistance * 3 * 12;
                            break;
                    }
                    break;
                case "Foot":
                    switch (measureOutput)
                    {
                        case "Foot":
                            toDistance = fromDistance;
                            break;
                        case "Yard":
                            toDistance = fromDistance / 3;
                            break;
                        case "Inch":
                            toDistance = fromDistance * 12;
                            break;
                    }
                    break;
                case "Inch":
                    switch (measureOutput)
                    {
                        case "Inch":
                            toDistance = fromDistance;
                            break;
                        case "Foot":
                            toDistance = fromDistance / 12;
                            break;
                        case "Yards":
                            toDistance = fromDistance / (3 * 12);
                            break;
                    }
                    break;
            }
    distanceOutput.Text = toDistance.ToString();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...