Entwickler-Ecke
C# - Die Sprache - IF Else Probleme
thixo - Mo 02.02.09 18:20
Titel: IF Else Probleme
Hi,
ich bräucht eure Hilfe :) (wie wohl ziemlich viele^^)
Ich mich in die IF Thematik selber eingelesen und mir auch eine Aufgabe gesucht, die wie folgt lautet:
Die Mitarbeiter der X-AG erhalten in diesem Jahr eine Prämie in Abhänigkeit ihres Vorjahreseinkommens und der Dauer ihrer Betriebszugehörigkeit. Folgende Prämiensätze sind hierzu gültig:
0 bis unter 2 Jahren 5% Prämie
2 bis unter 5 Jahren 10% Prämie
5 bis unter 15 Jahren 15% Prämie
15 und mehr Jahre 20% Prämie
Erstellen Sie ein Programm, das nach Eingabe des Vorjahreseinkommens und der Betriebszugehörigkeit die jeweilige Prämie ermittelt. Auf dem Bildschirm sollen die Eingabedaten und die Prämie ausgegeben werden.
So, ich habe nun das Programm soweit fertig geschrieben, habe aber leider ein kleines Problem.
Eine Variable wird nur als zugewiesene Variable erkannt, obwohl ich sie deklariert habe.
Hier mal mein Quelltext (Konsolenanwendung, VisualStudioExpress2008):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace Prämie { class Program { static void Main(string[] args) { double prämie;
Console.WriteLine("Berechnung der Prämie für Mitarbeiter der Firma X-AG"); Console.WriteLine("====================================================");
Console.Write("Bitte geben Sie Ihre Betriebszugehörigkeit an (in Jahren): "); double zugehörigkeit = Convert.ToDouble(Console.ReadLine());
Console.Write("Bitte geben Sie Ihr Vorjahreseinkommen an (in Euro): "); double einkommenvorjahr = Convert.ToDouble(Console.ReadLine());
if (zugehörigkeit > 0 && zugehörigkeit < 2) prämie = 0.05;
else if (zugehörigkeit > 2 && zugehörigkeit < 5) prämie = 0.1;
else if (zugehörigkeit > 5 && zugehörigkeit < 15) prämie = 0.15;
else if (zugehörigkeit > 15) prämie = 0.2;
double prämie1 = einkommenvorjahr * prämie; Console.WriteLine("\nSie erhalten eine Prämie über: {0} EUR", prämie1);
Console.ReadKey();
} } } |
Hatte das Problem schon bei einem Programm, das ich vorher geschrieben habe, konnte es auch da nicht finden und hab mich an einem neuen versucht, aber leider same shit as before :(
Ich danke euch schonmal für eure Hilfe.
Moderiert von
Kha: Code- durch C#-Tags ersetzt
danielf - Mo 02.02.09 18:40
Hallo,
du hast die Variable deklariert, aber nicht zugewiesen (es kann sein, dass keiner der Bedinungen true ist und dann wird der Variable prämie nie was zugewiesen).
Deklaration: double prämie;
Zuweisung: prämie = 0;
Deklaration+Zuweisung: double prämie = 0;
Ausserdem stimmen die Bereiche nicht zu denen im Aufgabentext (5 bis .. heißt zugehoerigkeit >= 5).
Mein Vorschlag:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| double prämie = 0.05;
if (zugehörigkeit >= 15) prämie = 0.2; else if (zugehörigkeit >= 5) prämie = 0.15; else if (zugehörigkeit >= 2) prämie = 0.1; |
Gruß Daniel
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
ilwaka - Mo 02.02.09 18:48
Hallo
ok frage wurde beantwortet.
Aber darf ich dir noch einen Tipp geben
Wenn man keine gültige Double Zahl eingibt stürzt das Programm ab
Deswegen würde ich vorschlagen das du Tryparse nimmst.
Beispiel:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| double zugehörigkeit string zugehörigkeiteingabe=Console.ReadLine(); if(Int32.Tryparse(zugehörigkeiteingabe,out zugehörigkeit)) { } |
Hoffe du verstehst was ich meine
thixo - Mo 02.02.09 18:59
Hi,
erstmal danke für eure antworten.
Mit dem double prämie = 0; hab ichs schon versucht, schuckt mir aber leider immer eine Prämie von 0 aus.
zu der Sache mit dem Tryparse:
Ähm, versteh ich leider nicht ganz, aber ich glaube es wäre ganz interessant zu wissen, was dieses tryparse macht bzw. für was das steht (sorry, bin ein totaler anfänger und lern das grad von grund auf ;) )
danke schon mal
:)
ilwaka - Mo 02.02.09 19:06
Das Problem hatte ich auch.
Aber dank JüTho weis ich das man bei so einem Problem im Visual Studio F1 drückt.
:D :)
da müsste alles drinstehen. Wenn du es dann noch nicht verstehst,dann frag nochmal nach.
JüTho - Mo 02.02.09 20:11
ilwaka hat folgendes geschrieben : |
Das Problem hatte ich auch.
Aber dank JüTho weis ich das man bei so einem Problem im Visual Studio F1 drückt. |
So ist es! :D Es ist generell sehr nützlich, in der
SDK-Doku/MSDN per Index zu einer Klasse die "Informationen zur" und "Alle Member" durchzulesen, was es alles so gibt.
Im konkreten Fall muss natürlich auch
double.TryParse genommen werden, wobei die Zugehörigkeit nach den Bedingungen auch als int verwendet werden kann.
Gruß Jürgen
Raffa1989 - Di 03.02.09 10:06
das erste was mir auffällt
es gibt ne prämie von 0 - 2 jahren und du hast
C#-Quelltext
1: 2:
| if (zugehörigkeit > 0 && zugehörigkeit < 2) prämie = 0.05; |
also bei dir würde man jetzt nur bei 1 jahr zugehörigkeit ne prämie erhalten ^^
C#-Quelltext
1: 2: 3: 4:
| if (zugehörigkeit >= 0 || zugehörigkeit < 2) { prämie = 0.05; } |
so wärs richtig ;)
ich kenne die if schleife so das nach der abfrage geschweifte klammern folgen und darin dann die anweisung :)
und du nimmst hier die und Anweisung d.h es müssen beide abfragen zutreffen in dem ersten bsp kannste die sogar nehmen aber ich finde die oder anweisung besser ^^
mfg Raffa
JüTho - Di 03.02.09 10:37
Raffa1989 hat folgendes geschrieben : |
| ich kenne die if schleife so das nach der abfrage geschweifte klammern folgen und darin dann die anweisung |
if-Schleife [
http://www.if-schleife.de] :roll:
Beides ist richtig, sofern nur eine
einzelne Anweisung folgt. Die geschweiften Klammern umfassen einen Block von einer oder mehreren Anweisungen. Bei einer einzelnen Anweisung können die Klammern entfallen; sie sind aber auch dann nützlich, weil die Zusammengehörigkeit und der Geltungsbereich von Variablen sofort deutlich werden und weil damit spätere Änderungen einfacher vorgenommen werden können.
Raffa1989 hat folgendes geschrieben : |
| und du nimmst hier die und Anweisung d.h es müssen beide abfragen zutreffen in dem ersten bsp kannste die sogar nehmen aber ich finde die oder anweisung besser |
Das ist falsch. Zum einen gibt es bei der Überlegung "und" gegenüber "oder" nicht die Entscheidung, was besser und was schlechter ist, sondern nur, was bei einer bestimmten Prüfung richtig und was falsch ist. Zum anderen geht es hier wirklich um "und": Bei "oder" wäre die erste Bedingung "> 0" auch erfüllt bei einer Zugehörigkeit von 20 Jahren, aber nach der Festlegung von 5% Prämie würden alle else-Zweige übersprungen.
Gerade bei solchen verschachtelten Abfragen muss wirklich genau überlegt werden:
- Welche Abfrage sollte als erste kommen, welche danach und welche zuletzt?
- Wie setze ich "größer" bzw. "kleiner" am besten ein?
- Wo brauche ich "größer/gleich" bzw. "kleiner/gleich" und wo darf "gleich" nicht benutzt werden?
- Wie berücksichtige ich einen Vorgabewert?
Insofern passt Daniels Vorschlag am ehesten (evtl. mit einem letzten else-Zweig für den default-Wert, aber das ist durch die Initialisierung nebensächlich).
Gruß Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!