Я новичок в программировании, поэтому прошу прощения за любые любительские ошибки. Я пытаюсь запрограммировать задачу, которая может вычислить базовую скорость метаболизма людей на основе их пола, роста, веса, возраста и количества физических упражнений. В своей попытке сделать это я попытался использовать два оператора if. В первом операторе if говорится, что если они выберут Male / Female, он будет обрабатывать вводимые пользователем данные по определенному алгоритму. Второй оператор if должен указывать, как часто пользователь выполняет упражнения. Второй вход - это тот, с которым у меня возникли трудности. Я не могу понять, как умножить BMR на испрашиваемую сумму. Часто ответ оказывается 0. Я действительно начинаю думать, что моя логика запуталась. Я приму любую критику, предложения, советы. Я просто хочу учиться!

Спасибо.

Вот мой код

    namespace WindowsFormsApplication9
{
    public partial class calorieCalculator : Form
    {
        double malebmr, femalebmr, calories;
        int bmrmult;
        string gender, exercise;
        double height, weight, age;//variables

        public calorieCalculator()
        {
            InitializeComponent();
        }

        private void calorieCalculator_Load(object sender, EventArgs e)
        {



        }

        private void calculateButton_Click(object sender, EventArgs e)
        {



            //get personal information
            height = double.Parse(heightTextBox.Text);
            weight = double.Parse(weightTextBox.Text);
            age = double.Parse(ageTextBox.Text);
            //select gender
           if (genderList.SelectedIndex != -1)
            {
                gender = genderList.SelectedItem.ToString();
                switch (gender)
                {
                    case "Male":
                        //perform calculation
                        malebmr = (weight * 10 + height * 6.25 - age * 5 - 5);
                        calories = malebmr * bmrmult;
                        bmrDisplay.Text = ("Your base metabolic rate burns " + calories+ " calories");
                        break;
                    case "Female":
                        femalebmr = weight * 10 + height * 6.25 - age * 5 - 161;
                        MessageBox.Show("You should eat:" + femalebmr + "calories");
                        break;
                }
            }
           if (exerciseList.SelectedIndex !=-1)
            {
                string exercise;
                exercise = exerciseList.SelectedItem.ToString();
                switch (exercise)
                {
                                    case "Light exercise (1–3 days per week)":
                                       bmrmult = (decimal)1.375;
                               break;
                                      case "Moderate exercise (3–5 days per week)":
                                         bmrmult = (int)1.55m;
                                        break;
                                    case "Heavy exercise (6–7 days per week)":
                                        bmrmult = (int)1.725m;
                                        break;
                                     case "Very heavy exercise (twice per day, extra heavy workouts)":
                                         bmrmult = (int)1.9m;
                                        break;
                }
            }
        }

РЕДАКТИРОВАТЬ: вот формулы

if Male
BMR = (10 × weight in kg) + (6.25 × height in cm) - (5 × age in years) + 5

 if Female
BMR = (10 × weight in kg) + (6.25 × height in cm) - (5 × age in years) - 161


Little to no exercise   Daily kilocalories needed = BMR x 1.2
Light exercise (1–3 days per week)  Daily kilocalories needed = BMR x 1.375
Moderate exercise (3–5 days per week)   Daily kilocalories needed = BMR x 1.55
Heavy exercise (6–7 days per week)  Daily kilocalories needed = BMR x 1.725
Very heavy exercise (twice per day, extra heavy workouts)   Daily kilocalories needed = BMR x 1.9

РЕДАКТИРОВАТЬ 2: Вот мой обновленный код!

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

namespace WindowsFormsApplication9
{
    public partial class calorieCalculator : Form
    {
        double malebmr, femalebmr, calories;
        int bmrmult;
        string gender, exercise;
        double height, weight, age;//variables

        public calorieCalculator()
        {
            InitializeComponent();
        }

        private void calorieCalculator_Load(object sender, EventArgs e)
        {



        }

        private void calculateButton_Click(object sender, EventArgs e)
        {



            //get personal information
            height = double.Parse(heightTextBox.Text);
            weight = double.Parse(weightTextBox.Text);
            age = double.Parse(ageTextBox.Text);
            //select gender
            if (exerciseList.SelectedIndex != -1)
            {
                string exercise;
                exercise = exerciseList.SelectedItem.ToString();
                switch (exercise)
                {
                    case "Light exercise (1–3 days per week)":
                        bmrmult = (int)1.375m;
                        break;
                    case "Moderate exercise (3–5 days per week)":
                        bmrmult = (int)1.55m;
                        break;
                    case "Heavy exercise (6–7 days per week)":
                        bmrmult = (int)1.725m;
                        break;
                    case "Very heavy exercise (twice per day, extra heavy workouts)":
                        bmrmult = (int)1.9m;
                        break;
                }
            }
            if (genderList.SelectedIndex != -1)
            {
                gender = genderList.SelectedItem.ToString();
                switch (gender)
                {
                    case "Male":
                        //perform calculation
                        malebmr = (weight * 10) + (height * 6.25) - (age * 5) - 5;
                        calories = malebmr * bmrmult;
                        bmrDisplay.Text = ("Your base metabolic rate burns " + calories + " calories");
                        break;
                    case "Female":
                        femalebmr = weight * 10 + height * 6.25 - age * 5 - 161;
                        MessageBox.Show("You should eat:" + femalebmr + "calories");
                        break;
                }
            }
        }
    }
}
c#
-1
Justin C 13 Ноя 2017 в 03:52

1 ответ

Лучший ответ

Когда вы преобразуете значения в целые числа, прежде чем помещать их в bmrmult, вы удаляете любую нецелую часть значения. Так что bmrmult станет 1 во всех случаях. Вам следует изменить тип переменной bmrmult на decimal или что-то, что может содержать десятичные значения, и удалить приведение (int).

Я также рекомендовал бы переключение на основе exerciseList.SelectedIndex вместо exerciseList.SelectedItem.ToString(), потому что более вероятно, что ваши строки изменятся, чем ваша последовательность элементов, и более вероятно, что будет опечатка в полном тексте, чем в индекс в списке.

0
BlueMonkMN 13 Ноя 2017 в 02:44