Autor |
Beitrag |
Mysterio08
      
Beiträge: 21
|
Verfasst: Sa 02.10.10 13:00
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 02.10.10 15:49
Ja, das geht genauso, aber man muss ja trotzdem die einzelnen Werte angeben.
|
|
Mysterio08 
      
Beiträge: 21
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.  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.
|
|
|