Entwickler-Ecke
C# - Die Sprache - Case Bereichsangabe
Mysterio08 - Sa 02.10.10 13:00
Titel: Case Bereichsangabe
Hallo,
ich habe eine Frage zur Case-Anweisung: Ist es möglich, auch ganze (Integer-)Bereiche prüfen zu lassen? In Delphi wäre das also äquivalent zu "1..5".
Wenn es so etwas nicht gibt: Wie würdet ihr solche Prüfungen vornehmen? Mit if-else (die einzige Alternative, die mir einfällt)?! Da ist dann aber wieder der Nachteil, dass es bei vielen (Bereichs-)Prüfungen sehr unübersichtlich wird.
mfg.
jaenicke - Sa 02.10.10 13:50
Du kannst nur schauen, ob du die Bereiche mathematisch erfassen kannst und auf wenige Werte reduzieren kannst.
Eine andere Möglichkeit gibt es in C# nicht, da musst du schon if..else benutzen.
Je nach Anwendungszweck und Zahlenbereichen kann es aber andere Tricks bzw. Möglichkeiten geben.
Delete - Sa 02.10.10 15:46
Also in C lässt man einfach das break am Ende weg. Jetzt ist mir aber die C#-case-Syntax nicht geläufig, deswegen kann ich nicht sagen, ob es da auch so geht.
jaenicke - Sa 02.10.10 15:49
Ja, das geht genauso, aber man muss ja trotzdem die einzelnen Werte angeben.
Mysterio08 - So 03.10.10 08:42
jaenicke hat folgendes geschrieben : |
Du kannst nur schauen, ob du die Bereiche mathematisch erfassen kannst und auf wenige Werte reduzieren kannst. |
Ich bin auf diese Bereichsfrage erst gekommen, als ich eine ganz einfache Aufgabe lösen wollte: in ein Edit wird eine Zahl zwischen 1 und 15 eingegeben und ausgegeben wird die Note - wie man es von der Oberstufe kennt.
Wie würdest du da solch einen mathematischen Bereich erfassen bzw. mit welchem Trick (nur damit ich mal eine Vorstellung habe).
jaenicke - So 03.10.10 09:18
Nun, dort macht eine komplette Switch-Abfrage kaum Sinn, da man die Note auch direkt berechnen kann. Bereiche gibt es da für + oder - als Zusatz, das kann man mit modulo zusammenfassen. Hier mal zwei Lösungswege, ein kurzer und einer mit switch. :mrgreen:
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:
| private void button1_Click(object sender, EventArgs e) { int Mark = 0; if (Int32.TryParse(textBox1.Text, out Mark)) label1.Text = new string[] { "6", "5-", "5", "5+", "4-", "4", "4+", "3-", "3", "3+", "2-", "2", "2+", "1-", "1", "1+" }[Mark]; }
private void button2_Click(object sender, EventArgs e) { int Mark = 0; if (Int32.TryParse(textBox2.Text, out Mark)) { int NewMark = 6 - (Int32)Math.Ceiling(Mark / 3.0); String MarkString = NewMark.ToString(); switch (Mark % 3) { case 0: if (Mark != 0) MarkString = MarkString + '+'; break; case 1: MarkString = MarkString + '-'; break; } label2.Text = MarkString; } } |
Ach ja, für die Zahlen 1-15 als Bereich könntest du modulo 15 benutzen, wenn du schauen willst ob eine Zahl in diesem Bereich ist.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!