Forum: PC-Programmierung [C#] Prüfen ob Integer Zahl a,b,c,d,e ist


von M.Holder (Gast)


Lesenswert?

Hallo,

ich habe hier ein Problem.

Ich muss prüfen ob der Integer i einer der Zahlen

7,12,16,18,19,37 und mehr   ist.

Probiert habe ich es hiermit:

if (i == 7 | 12 | 16 ...)
{
...
}

hier kommt aber ein Kompilerfehler


Wie muss diese Prüfung aussehen??


MFG Max

von Chris .. (dechavue)


Lesenswert?

Wenn es viele Zahlen sind, packst du sie am besten in eine Liste/ein 
HashSet und prüfst mit Contains.

HashSet ist hierfür besser geeignet, gibt es allerdings erst ab 3.5 
(oder 3.0?)
1
            //.Net 3.5:
2
            HashSet<int> nums = new HashSet<int>() {7,12,16};
3
4
            //.Net 2.0:
5
            //List<int> nums = new List<int>() { 7, 12, 16 };
6
            if(nums.Contains(i)) { 
7
                ...
8
            }

Dein Code sähe richtigermasen so aus, wird aber bei vielen Zahlen 
schnell unübersichtlich:
1
if (i == 7 || i == 12 || i == 16 ...)
2
{
3
...
4
}

von Daniel (root) (Gast)


Lesenswert?

wäre in C++ so
1
switch(i){
2
   case 5:
3
   case 7:
4
   case 16:
5
      yes();
6
      break;
7
   default:
8
       no();
9
}

von Daniel (root) (Gast)


Lesenswert?

in Python wäre das so
1
if i in [5,7,16]:
2
    yes()
3
else:
4
    no()

nicht umsonst wird python als die einfachste sprache bezeichnet ;)

von Peter (Gast)


Lesenswert?

in Pascal geht das auch

if i in [5,7,16]

von M.Holder (Gast)


Lesenswert?

Ja, die Möglichkeiten hatte ich schon.
Blos mein Problem ist, wenn einer dieser Zahlen i ist, soll nix gemacht 
werden. Wenn alle dieser Zahlen nicht vorkommen, wird eine eine Kette 
von Befehlen durchgeführt.

MFG Max

von Daniel (root) (Gast)


Lesenswert?

wo ist dann das problem?
1
for(int i=0; i<N; i++)
2
   if(!is_i_in(1,2,3,4))
3
       do_what_you_want();

in python könnte man buildin set Mengen benutzen
1
lst=[1,2,3,6,7,8,9,0,9]
2
if not(set([6,7,9]) and set(lst)):
3
    do_what_you_want()

@Peter
echt geht das in Turbo Pascal?

Sicher geht aber das nicht ;)
if i in [1,2,"hello",3.0]:

die liste ist heterogen

von M.Holder (Gast)


Lesenswert?

Hallo,

if (!is_i_in(7,12,16,18,19);
{
   //nix machen
}
else
{
   Befehl xy;
}

dann gibt bei else den Fehler.

MFG max

von M.Holder (Gast)


Lesenswert?

ups,

Klammer zu vergessen.
So isses richtig: if (!is_i_in(7,12,16,18,19));

problem besteht weiterhin

MFG Max

von Joachim B. (jojo84)


Lesenswert?

Zu deinem Fehler fällt mir zwar grad nichts ein, aber kannst du das 
nicht einfach in einer while-Schleife machen? Ist zwar nicht besonders 
effizient "nichts" zu tun, aber würde doch aufs gleiche raus kommen, 
oder?

Ich würd das vielleicht so machen:
1
if ( (i == 7) || (i == 12) || (i == 16) ...)
2
{
3
; //nichts tun
4
}
5
6
else
7
{
8
; //etwas tun
9
}

oder
1
while( (i == 7) || (i == 12) || (i == 16) ...)
2
{
3
; //nichts tun
4
}

edit
hast du oben beim if nicht nen semikolon zuviel?!

von M.Holder (Gast)


Lesenswert?

Danke, so hats geklappt.

von Joachim B. (jojo84)


Lesenswert?

Bitte, genre :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.