C # счетчик калорий - PullRequest
       32

C # счетчик калорий

1 голос
/ 03 октября 2019

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

Проблема в том, что «мешок с печеньем вмещает 40 файлов cookie. В информации о калориях на сумке указывается, что в сумке содержится 10 порций, а порция равна 300 калориям. Создайте приложение, которое позволяет пользователю вводить количество печенья, которое он или она фактически съел, а затем сообщает о количестве потребленных калорий. "

Моя форма: My form

Ошибка, которую я получаю при запуске без отладки: The error i get when I run without debugging

// ниже мой код

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Calorie_Counter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int cookies = int.Parse(textBox1.Text);

            int calories = (cookies * 75);

            textBox2.Text = calories.ToString();
        }
    }
}

1 Ответ

5 голосов
/ 03 октября 2019

Вы столкнулись с этой проблемой при использовании метода int.Parse(). Этот метод просто преобразует все, что вы передали ему как string в int. Итак, что-то вроде "33" будет преобразовано, но что, если вы ввели что-то, что явно не является integer, например "x" или даже пустой строкой? значение 33 в int введите без проблем.

int parseResultGood = int.Parse("33");

Но это не удастся и вызовет исключение, потому что, очевидно, "x" не может быть преобразовано в целое число.

int parseResultBad = int.Parse("x");

К счастью, C# предоставляет вам другой метод для более эффективной обработки, а именно метод int.TryPrase(). Как следует из названия, пытается проанализировать значение и преобразовать его в int, только если это возможно, и отправить его обратно вам в параметре out, пока оно будет return true. Если преобразование не удалось, скажем, из-за того, что вы передали нецелое значение как string, оно будет return false, а значение параметра out будет zero. Поэтому, основываясь на возвращаемом значении true/false, вы можете узнать, было ли преобразование успешным или нет, и оно не вызовет исключения.

int tryParseResult = 0;
if (int.TryParse("X", out tryParseResult))
{
    // Use the converted value
}
else
{
    // Display an error message or something similar
}

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

...