25. august 2005 - 11:53
Der er
15 kommentarer
Switch Case spm.
Hej Jeg synes ikke at switch case er så god. Hvad hvis jeg har et tal e mellem 0 og 1000; Og så vil jeg på den baggrund beregne et andet tal x på følgende måde. Hvis e tilhører [0;20] så x = 1; Hvis e tilhører ]20;200] så x = 2; Hvis e tilhører ]200;500] så x = 3; Hvis e tilhører ]500;1000] så x = 4; Det kan jeg da ikke gøre med en Switch case konstruktion ? Som jeg ser der kan jeg kun gøre det med en masse if sætninger og en goto og en label ? Er der ikke en smatere og pænere måde ?
Annonceindlæg fra Computerworld
25. august 2005 - 11:54
#1
]20;200] betyder intervallet imellem 20 og 200 hvor 20 ikke er med og 200 er med.
25. august 2005 - 12:01
#2
Kan selvfølgelig godt gøre det uden en goto, ved bare at retunere talet det samme. Men det kan jeg ikke i mit konkrette tilfælde.
25. august 2005 - 12:07
#3
Ingen grund til at blande goto og labels ind i det: if (0<=e && e<=20) x = 1; else if (e<=200) x = 2; else if (e<=500 x = 3; else if (e<=100) x = 4;
25. august 2005 - 12:09
#4
Dette er nok mere korrekt: if (0<e) { if (e<=20) x = 1; else if (e<=200) x = 2; else if (e<=500) x = 3; else if (e<=100) x = 4; }
25. august 2005 - 12:18
#5
måske putte limits og resultat ind i arrays og så finde i en for løkke ?
25. august 2005 - 13:00
#6
if (0<e) { if (e<=20) x = 1; else if (e > 20 && e<=200) x = 2; else if (e > 200 && e<=500) x = 3; else if (e > 500 && e<=1000) x = 4; } Det må have været sådan den skulle se ud, ellers checker den ikke intervallet men bar om e er mindre end tallet
25. august 2005 - 13:03
#7
det er også godt nok med else if fordi man aldrig kommer derind hvis e er mindre end lower limit
25. august 2005 - 19:22
#8
Tak, jo klart nok. Det var lidt noget vrøvl det med goto. Men det kan da ikke lade sig gøre at gøre det med switch case vel ? Det er fordi at jeg skal bruge det ret meget, så jeg synes også at det bliver grimt med if else. Men det ser ud somom det er den eneste løsning. Men kan selvfølgelig godt se at det hjælper når man undlader at lave dybere og dybere tabulator indrykning :)
25. august 2005 - 20:14
#9
Det er ikke muligt at lave det med switch-case - jo, men så skulle man angive samtlige værdier, og så ville det hurtig blive en meget stooooor switch-case! ;^)
25. august 2005 - 20:46
#10
lidt kode til inspiration: using System; namespace E { public class Grouping { public static int Grouping1(int v) { if(v < 0 || v > 1000) { throw new ArgumentOutOfRangeException("Invalid number " + v); } if (v <= 20) { return 1; } else if (v <= 200) { return 2; } else if (v <= 500) { return 3; } else if (v <= 1000) { return 4; } throw new Exception("Something impossible happended"); } private static int[] LIMITS = { 20, 200, 500, 1000 }; public static int Grouping2(int v) { if(v < 0 || v > 1000) { throw new ArgumentOutOfRangeException("Invalid number " + v); } for(int i = 0; i < LIMITS.Length; i++) { if(v <= LIMITS[i]) { return (i + 1); } } throw new Exception("Something impossible happended"); } public static int Grouping3(int v) { if(v < 0 || v > 1000) { throw new ArgumentOutOfRangeException("Invalid number " + v); } return 1 + (v > 20 ? 1 : 0) + (v > 200 ? 1 : 0) + (v > 500 ? 1 : 0); } } public class TestClass { public static void Main(string[] args) { Random rng = new Random(); for(int i = 0; i < 20; i++) { int rn = rng.Next(1000); Console.WriteLine(Grouping.Grouping1(rn) + " " + Grouping.Grouping2(rn) + " " + Grouping.Grouping3(rn)); } } } }
26. august 2005 - 00:10
#11
Tak for svar inklusive den flotte kode. Generelt synes jeg kode arbejdet ville være lettere hvis der var indbygget mængde funktioner i c#.
26. august 2005 - 07:52
#12
Du kan jo selv lave en Set-type (Set=Mængde) hvis du vil, men ellers vile jeg da give dig ret. Jeg startede selv med Turbo Pascal (altså efter ID Comal) og der har man faktisk en Set-variabeltype og den var da rar at have somme tider. Men det var nu ikke særligt tit at man brugte den. Men C# har det altså ikke på forhånd.
05. september 2005 - 19:11
#13
Lukketid?
15. september 2005 - 18:09
#14
?
29. september 2005 - 20:45
#15
??
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.