Что не так с циклом if-else if? - C#
Формулировка задачи:
Первый язык, изучаю полтора месяца и захотелось написать программу которая вычисляет идеальный вес...
Нашел формулу расчета идеального веса, и все окей, кроме одной ошибки...
Когда проходит по 2 case:
Если ввести к примеру 57 килограм и рост 1,66, то результат(18,61.....) будет правильно отображен и напишет:
В тоже время если результат выходит за пределы 25, то все равно показывает сообщение в пределах от 18.5 до 25...
Возможно стоит поставить вместо || другую операцию? Но что бы я не ставил, результат все равно не такой как нужно... Если поставлю && и укажу 79 килограм и рост 1,6, оно выдаст правильный результат только после 4 запросов какой вес и какой рост...
Вот программа целиком.
Есть идеи где я сделал что то не то?)))
case "2":
{
Vaga IMT = new Vaga();
if ((IMT.GetVaga2() > 18.5) || (IMT.GetVaga2() < 25))
{
Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
break;
}
else if ((IMT.GetVaga2() >= 25) || (IMT.GetVaga2() < 30))
{
Console.WriteLine("Вiд 25 до 30 – у вас спостерiгається надмiрна вага.");
}
else if ((IMT.GetVaga2() >= 30) || (IMT.GetVaga2() < 35))
{
Console.WriteLine("Вiд 30 до 35 – у вас перша ступiнь ожирiння.");
}
else if ((IMT.GetVaga2() >= 35) || (IMT.GetVaga2() < 40))
{
Console.WriteLine("Вiд 35 до 40 – у вас друга ступiнь ожирiння.");
}
else
{
Console.WriteLine("Бiльше 40 – у вас третя ступiнь ожирiння. Рiзко пiдвищений ризик для здоров’я.");
}
break;
} if ((IMT.GetVaga2() > 18.5) || (IMT.GetVaga2() < 25))
{
Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
break;
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine();
Console.Write("Оберiть варiант за яким будем визначати вашу iдеальну вагу:\n1. Формула ЮЗ - Годлевського\n2. Iндекс маси тiла\n" +
"Ваш вибiр: ");
string variants = Convert.ToString(Console.ReadLine()); //Convert.ToString(Console.ReadLine());
switch (variants)
{
case "1":
{
Vaga YE = new Vaga();
YE.GetVag();
break;
}
case "2":
{
Vaga IMT = new Vaga();
if ((IMT.GetVaga2() > 18.5) || (IMT.GetVaga2() < 25))
{
Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
break;
}
else if ((IMT.GetVaga2() >= 25) || (IMT.GetVaga2() < 30))
{
Console.WriteLine("Вiд 25 до 30 – у вас спостерiгається надмiрна вага.");
}
else if ((IMT.GetVaga2() >= 30) || (IMT.GetVaga2() < 35))
{
Console.WriteLine("Вiд 30 до 35 – у вас перша ступiнь ожирiння.");
}
else if ((IMT.GetVaga2() >= 35) || (IMT.GetVaga2() < 40))
{
Console.WriteLine("Вiд 35 до 40 – у вас друга ступiнь ожирiння.");
}
else
{
Console.WriteLine("Бiльше 40 – у вас третя ступiнь ожирiння. Рiзко пiдвищений ризик для здоров’я.");
}
break;
}
}
Console.ReadLine();
}
}
class Vaga
{
public double zrist;
public double vaga;
public double vik;
public double ideal;
public double GetVag()
{
Console.WriteLine();
Console.Write("Введiть свiй зрiст в сантиментрах: ");
zrist = Convert.ToDouble(Console.ReadLine());
Console.Write("Введiть свiй вiк: ");
vik = Convert.ToDouble(Console.ReadLine());
ideal = ((zrist - 100) + (vik / 10)) - 2 * ((zrist - 100) / 10);
Console.WriteLine("Ваша iдеальна вага складає: {0} кг.", ideal);
return ideal;
}
public double GetVaga2()
{
//ІМТ (індекс маси тіла) = маса тіла в кг / (зріст в м * зріст в м)
Console.WriteLine();
Console.Write("Введiть свою вагу в кiлограмах: ");
vaga = Convert.ToDouble(Console.ReadLine());
Console.Write("Введiть свiй зрiст в метрах: ");
zrist = Convert.ToDouble(Console.ReadLine());
ideal = vaga / (zrist * zrist);
if (zrist < 1.68)
{
ideal = ideal * 0.9;
}
else if ((zrist >= 1.68) && (zrist < 1.88))
{
ideal = ideal * 1;
}
else
{
ideal = ideal * 1.1;
}
Console.WriteLine();
Console.WriteLine("Ваш iндекс маси тiла: {0}", ideal);
return ideal;
}
}
}Решение задачи: «Что не так с циклом if-else if?»
textual
Листинг программы
Vaga IMT = new Vaga();
var weight = IMT.GetVaga2();
if (weight < 25)
Console.WriteLine("Вiд 18,5 до 25 – у вас все в порядку з вагою.");
else
if (weight < 30)
Console.WriteLine("Вiд 25 до 30 – у вас спостерiгається надмiрна вага.");
else
if (weight < 35)
Console.WriteLine("Вiд 30 до 35 – у вас перша ступiнь ожирiння.");
else
if (weight < 40)
Console.WriteLine("Вiд 35 до 40 – у вас друга ступiнь ожирiння.");
else
Console.WriteLine("Бiльше 40 – у вас третя ступiнь ожирiння. Рiзко пiдвищений ризик для здоров’я.");