Как проверить, больше ли число в текстовом поле, чем предопределенное значение? - PullRequest
0 голосов
/ 18 июля 2010

Я делаю упражнение, где мне нужно подать заявку на парковку.Задачи: Создать форму с числовым элементом управления UpDown для выбора времени парковки автомобиля.Добавьте кнопки выбора, чтобы показать, является ли автомобиль легковым или грузовым автомобилем.Четко обозначьте каждую коробку и кнопку.Добавьте ярлык или текстовое поле, чтобы показать сумму для оплаты.

Кроме того, я должен установить некоторые ограничения.Автомобили должны платить не более 38,00 долларов США за 24 часа, а грузовые автомобили - не более 44,50 долларов США за 24 часа.

Единственная проблема, которую я нахожу, заключается в том, что я не могу установить эти ограничения.Выдает ошибку: Использование неназначенной локальной переменной 'result'.

Проверьте закомментированный /// код.

Любая помощь приветствуется.Это не школьный проект, я просто изучаю c # и выполняю некоторые упражнения.

Вот код:

        private void calculate_Click(object sender, EventArgs e)
    {
        double carhours = 3;
        double truckhours = 3.50;
        double carFirsthour = 5;
        double truckFirsthour = 6;
        int hrs = (int)numericUpDown.Value;
        double result;
        int maxCarFee = 38;


        if (numericUpDown.Value < 1)
        {
            MessageBox.Show("NO WAY");
            return;
        }

        if (carButton.Checked == true && (numericUpDown.Value == 1))
        {
            result = (hrs * carFirsthour);
            fee.Text = "$" +  result;
        }

        if (carButton.Checked == true && (numericUpDown.Value > 1))
        {
            result = ((hrs - 1) * carhours + carFirsthour);
            fee.Text = "$" + result;
        }

        if (truckButton.Checked == true && (numericUpDown.Value == 1))
        {
            result = (hrs * truckFirsthour);
            fee.Text = "$" + result;
        }

        if (truckButton.Checked == true && (numericUpDown.Value > 1))
        {
            result = ((hrs - 1) * truckhours + truckFirsthour);
            fee.Text = "$" + result;
        }

        /// limits

        ///if (carButton.Checked == true && (numericUpDown.Value < 24) && (result > maxCarFee))
        ///{
        ///    fee.Text = "$" + maxCarFee;
        ///}
    }

Ответы [ 5 ]

1 голос
/ 18 июля 2010

Попробуйте что-то вроде этого:

private void calculate_Click(object sender, EventArgs e) {
    double carhours = 3.0;
    double truckhours = 3.5;
    double carFirsthour = 5.0;
    double truckFirsthour = 6.0;
    double maxCarFee = 38.0;
    double maxTruckFee = 44.5;

    int hrs = (int)numericUpDown.Value;
    double result;

    if (hrs < 1) {
        MessageBox.Show("NO WAY");
        return;
    }

    if (carButton.Checked) {
        result = (hrs-1) * carhours + carFirsthour;
        if (result > maxCarFee) {
            result = maxCarFee;
        }
    }
    else {
        result = (hrs-1) * truckhours + truckFirsthour;
        if (result > maxTruckFee) {
            result = maxTruckFee;
        }
    }

    fee.Text = "$" +  result;
}

Однако вы не совсем понимаете, что должно произойти, если автомобиль / грузовик останется более 24 часов (или более 48 часов).Вы можете получить более последовательные результаты, например:

private void calculate_Click(object sender, EventArgs e) {
    double hourlyFee = 3.0;
    double firstHourFee = 5.0;
    double max24hrFee = 38.0;

    if (!carButton.Checked) {
       hourlyFee = 3.5;
       firstHourFee = 6.0;
       max24hrFee = 44.5;
    }

    int hrs = (int)numericUpDown.Value;
    if (hrs < 1) {
        MessageBox.Show("NO WAY");
        return;
    }

    double result = 0.0;
    if (hrs >= 24) {
       result = (hrs / 24) * max24hrFee;
       hrs = hrs % 24;
    }

    if (hrs > 0) {
       result = result + firstHourFee + ((hrs-1) * hourlyFee);
    }

    fee.Text = "$" +  result;
}
1 голос
/ 18 июля 2010

вам нужно конвертировать numericUpDown.Value до int32

или потому что вы сделали это:

int hrs = (int)numericUpDown.Value; 

вы можете просто использовать hrs вместо numericUpDown.Value в операторе if

0 голосов
/ 18 июля 2010

Проблема в том, что ни один из условных (если) операторов не выполняется, поэтому result никогда не присваивается значение. Назначьте result в его объявлении - double result = 0D; - и код запустится, чтобы вы могли отладить условную логику.

0 голосов
/ 18 июля 2010
int hrs = (int)numericUpDown.Value;

Вы получаете значение в часах, поэтому можете использовать его в своих условиях if.

if (carButton.Checked == true && (numericUpDown.Value == 1))

Напишите это следующим образом. Нет необходимости == true

if (carButton.Checked && (numericUpDown.Value == 1))
0 голосов
/ 18 июля 2010

Вы проверяете, является ли numericUpDown.Value меньше 24, я думаю, вы имеете в виду больше (>)?!

Использование неназначенной локальной переменной 'result'

означает, что вы не инициализируете переменную. Вы должны сделать что-то вроде этого

result = 0 

прежде чем перейти к конструкции if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...