Mahlzeit zusammen! Erstmal hoff ich das ich hier trotz dem Hinweis keine "Anfänger"-Fragen stellen, richtig bin..
Ich häng grad in meinem BMI-Programm fest, da ich vom denken her nicht wirklich weiterkomme.
Ich hab einen BMI errechnet und möchte nun prüfen in welcher Reichweite er liegt d.h.
Alter 18-24 :
< 19 Untergewicht
19-24 Normalgewicht
24-29 Übergewicht
29-39 Fettleibigkeit
> 39 starke Fettleibigkeit
komme ich da mit Switch weiter ohne ein endloslanges
static string bmiTable(int index){
switch(index)
{
case 18: Console.WriteLine("zudünn");
break;
case 19: Console.WriteLine("zudünn");
break;
// case 20, case 21... etc <<
default: Console.WriteLine("Unbekannter BMI");
break;
}
return index.ToString();
}
schreiben zu müssen. Gibt es Möglichkeiten eine Reichweite festzulegen? z.b.
case 20-25: mach etwas;
oder muss ich da tatsächlich mit "if - else if" arbeiten?
LG
Tom
case 20-25: mach etwas;
Nein, mit C# nicht.
oder muss ich da tatsächlich mit "if - else if" arbeiten?
Ja, was aber doch nicht weiter schlimm ist.
if (bmi<19)
return "Untergewicht";
else if (bmi<24)
return "Normalgewicht";
else if (bmi<29)
...
else
return "starke Fettleibigkeit";
Es wäre sicher auch eine Überlegung wert, die Kategorien als Enum zu realisieren.
Gruß,
dN!3L
du musst das zwangsläufig mit if-else machen, da bei korrekter BMI berechnung fließkommazahlen entstehen und die sind mi catch.... schwer abzugreifen.
des weiteren sind in diesem zusammenhang vergleichsfehler zu erwarten: [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler
Vielen Dank für die zügigen Antworten.
zum Thema "enum", da werd ich mich nachher mal reinknien wie genau das funktioniert.
was die Ungenauigkeiten angeht, hab ich das nun so verstanden das es bei solchen Berechnungen besser wäre direkt auf decimal zurückzugreifen?
Gruß
Tom
was die Ungenauigkeiten angeht, hab ich das nun so verstanden das es bei solchen Berechnungen besser wäre direkt auf decimal zurückzugreifen?
Nein, eher nicht. Beim BMI kommt es (anders als in der Buchhaltung) nicht auf Genauigkeit an; da passen double-Werte. Du musst nur bei den Vergleichen aufpassen, also dich nicht auf exakte Gleichheit verlassen.
Jürgen
Naja, beim BMI reichen eigentlich sogar integer Werte.
Wobei BMI ansich ziemlich unsinnig ist.
Ich habe z.b. so um die 28, also übergewichtig.
Ich kenne aber keinen der meint das ich zuviel habe, nicht mal Gesundheitsfanatiker.
Habe halt schwere Füsse.
bmi ist sehr sinnig. es dient zur klassifikation. das bei einer klassifikation, angewendet auf biologische parameter, nich alles und jedes korrekt und absolut erfasst wird, ist normal. es geht dabei nur um schriftliches, nachweisbares und fest definiertes festhalten einer gegebenheit.
Ich werde es dann mal mit der if else if Variante probieren. Enum versteh ich irgendwie noch nicht oder, was wahrscheinlicher ist wende ich es falsch an wenn ich dort schreibe
public enum Untergewicht{
0,
1,
2,
3,
//....
19
}
Werd mir aber nochmal genauer die :rtfm: um die Ohren hauen.
es war eher so gemeint:
enum Gewichtsklasse
{
Untergewicht,
Normalgewicht,
Übergewicht, ...
}
edit:
Naja, beim BMI reichen eigentlich sogar integer Werte.
im gesundheitsbereich wären die buchhalter und die pflegekräft nicht so glücklich... denn dort entscheidet die klassifikation je nach eingeführten system, wieviel zeit sie dem patienten berechnen können. erstmal klingt es ja nciht so schlimm, da ja auf der allgemeinen klassifikation ja eh nur ganze zahlen verwendet werden aber im gesundheitsbereich habe ich auch schon systeme gesehen, die mit kommazahlen ein feineres klassifikationssystem verwenden.
Enum versteh ich irgendwie noch nicht oder, was wahrscheinlicher ist wende ich es falsch an wenn ich dort schreibe[...]
Ja, ist so falsch 😛 Und nochmal: Für Bereichsabfragen kannst du kein switch-case benutzen.
Enums kannst du (in diesem Fall) als Rückgabewert benutzen (statt string), da du ja die BMI-Kategorie ermitteln willst.
Gruß,
dN!3L
Hallo Tom.toString,
num versteh ich irgendwie noch nicht
bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Wie enums funktionieren und wie man sie verwendet, setzten wir als bekannt voraus.
herbivore