Entwickler-Ecke
C# - Die Sprache - Switch Case
Rakeem - Do 19.03.09 18:08
Titel: Switch Case
Hi bin dabei ein Programm zuschreiben das Daten ordnet aber irgendwie kriege ich einen fehler nicht weg.
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: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int tag1, monat1, jahr1; int tag2, monat2, jahr2; int tag, monat, jahr; double schaltjahr = 0; int i = 0;
Console.WriteLine("\t\t______________________________________________"); Console.Write("\t\tBitte geben Sie einen gewünschten Tag ein: "); tag = Convert.ToInt32(Console.ReadLine()); Console.Write("\t\tBitte geben Sie einen gewünschten Monat ein: "); monat = Convert.ToInt32(Console.ReadLine()); Console.Write("\t\tBitte geben Sie einen gewünschtes Jahr ein: "); jahr = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("\t\t______________________________________________");
for(i = 0;i < 3 ;i++) { if(tag>= 32 && monat == 1 || monat == 3 || monat == 5 || monat == 7 || monat == 8 || monat == 10 || monat == 12) { Console.WriteLine("Fehler!Bitte geben Sie ein gültiges Datum ein!"); } else { if(tag>= 31 && monat == 4 || monat == 6 || monat == 9 || monat == 11) { Console.WriteLine("Fehler!Bitte geben Sie ein gültiges Datum ein!"); } else { if (jahr % 4 == 0) { if(jahr % 100 == 0) { if (jahr % 400 == 0) { schaltjahr = 1; } else { schaltjahr = 0; } switch(i) { case 1: Console.Write("tag"); Console.Write("monat"); Console.Write("jahr"); break; case 2: Console.Write("tag"); tag=tag1; Console.Write("monat"); monat=monat1; Console.Write("jahr"); jahr=jahr1; break; case 3: Console.Write("tag"); tag=tag2; Console.Write("monat"); monat=monat2; Console.Write("jahr"); jahr=jahr2; break; } if(tag && monat && jahr > tag1 && monat1 && jahr1) { Console.Write(tag); Console.Write(monat); Console.Write(jahr); } else { if(tag && monat && jahr > tag2 && monat2 && jahr2) { Console.Write(tag); Console.Write(monat); Console.Write(jahr); } else { if (tag1 && monat1 && jahr1 > tag && monat && jahr) { } } } } } } } } } } } |
Moderiert von
Christian S.: Topic aus Basistechnologien verschoben am Do 19.03.2009 um 18:19
JüTho - Do 19.03.09 18:43
Rakeem hat folgendes geschrieben : |
| Hi bin dabei ein Programm zuschreiben das Daten ordnet aber irgendwie kriege ich einen fehler nicht weg. |
Was denn für einen Fehler? Compiler oder Laufzeit? Wie lautet die Fehlermeldung; wenn es keine gibt: woran merkst du, dass etwas falsch ist?
Außerdem ist Code unbedingt als solcher zu markieren. So ist es überhaupt nicht lesbar. Ändere deinen ersten Beitrag (der Button mit der Schere), markiere den Code-Bereich, drücke auf "Bereiche", wähle C# aus, drücke den Plus-Button. Danach kann man vielleicht antworten.
Zur Prüfung, ob ein gültiges Datum eingegeben wurde, gibt es die schöne
DateTime.TryParse-Methode.
Jürgen
Rakeem - Do 19.03.09 18:51
als fehler ist gekenzeichnet Der Operator "&&" kann nicht auf Operanden vom Typ "int" angewendet werden.
Skiller-1988 - Do 19.03.09 19:23
Ja denn && ist ein Logischer Verküpfungsoperator also das AND was nur zwei bool - werte ( Wahr / Falsch Bedingung ) miteinander Verknüpfen kann.
Der Fehler ist also :
C#-Quelltext
1:
| if (tag && monat && jahr > tag2 && monat2 && jahr2) |
Statt dessen könntest du die 2 Daten in ein DateTime umwandeln und dann die DateTimes verglichen.
JüTho - Do 19.03.09 20:10
Skiller-1988 hat folgendes geschrieben : |
| Statt dessen könntest du die 2 Daten in ein DateTime umwandeln und dann die DateTimes verglichen. |
Das empfehle ich vorrangig; deshalb habe ich
DateTime.TryParse vorgeschlagen.
Skiller-1988 hat folgendes geschrieben : |
Der Fehler ist also :
C#-Quelltext 1:
| if (tag && monat && jahr > tag2 && monat2 && jahr2) | |
Lösung innerhalb dieses Versuchs: Du musst jeden einzelnen Wert vergleichen, sodass drei AND entstehen für drei bool-Werte, die sich durch den Vergleich je zweier int-Werte ergeben:
C#-Quelltext
1:
| if ( (tag > tag2) && (monat > monat2) && (jahr > jahr2) ) |
Das wäre eine logisch einwandfreie Formulierung.
Aber das ist sowieso als Vergleich zweier Datumsangaben Quatsch: Der 1.4.2009 liegt später als der 28.2.2009, würde aber bei dem, was Du anscheinend versuchst, eine falsche Antwort ergeben.
Jürgen
Rakeem - Do 19.03.09 21:05
Ja danke hab denn Fehler beheben können.
Ja hab ich auch gemerkt das es als falsch ausgegeben wird haste vllt ein vorschlag wie ich es richtig machen könnte.
Nemag - Fr 20.03.09 08:25
Naja der Jürgen hat dir doch schon die DateTime.TryParse Methode gesagt, du müsste halt deine 3 Variablen Jahr Monat Tag damit in ein Zeitformat umwandeln.
Falls du mit der Methode nicht klar kommst dann mach halt:
(Wovon ich aber abrate und wieder zu TryParse verweise)
DateTime xxx1 = new DateTime(jahr1, monat1, tag1 , ...)
DateTime xxx2 = new DateTime(jahr2, monat2, tag2 , ...)
edit: übrigens wenn du in DateTime konvertierst gibt es auch die schöne Funktion IsLeapYear womit du dir deine ganze Schaltjahr abfrage sparst.
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!