Branzetti Geschrieben 10. August 2010 Geschrieben 10. August 2010 (bearbeitet) Hi hab ne frage! Für mein erstes Programmier Projekt möchte ich mit einer if Abfrage die Vorraussetzung geben das wenn 4 Boolean Werte auf false stehen etwas passiert. Mein Problem ist das ich nur einen Radiobutten in der abfrage haben kann der operator and z.B. fuktioniert nicht! BSP: rdb_1.enabled = false and rdb_2.enabled = false....... then das funktioniert leider nicht! Würde mich über eure Hilfe freuen. Gruß Branzetti Bearbeitet 10. August 2010 von Branzetti Zitieren
Guybrush Threepwood Geschrieben 10. August 2010 Geschrieben 10. August 2010 if (!wert1 && !wert2 && !wert3 && !wert4) { //mach was } Zitieren
Branzetti Geschrieben 10. August 2010 Autor Geschrieben 10. August 2010 das is für c# richtig? funktioniert das auch in Vb?? danke schonmal Zitieren
Klotzkopp Geschrieben 10. August 2010 Geschrieben 10. August 2010 das funktioniert leider nicht!Siehe meine Signatur. Mit "funktioniert nicht" kann niemand etwas anfangen. Wenn du eine Fehlermeldung bekommst, schreib die bitte hin. Und wenn nicht, beschreibe, wie sich das gewünschte vom beobachteten Verhalten unterscheidet. Zitieren
Branzetti Geschrieben 10. August 2010 Autor Geschrieben 10. August 2010 die Fehlermeldung ist das der Operator "and" nicht definiert ist! Zitieren
chrixko Geschrieben 10. August 2010 Geschrieben 10. August 2010 (bearbeitet) Funktioniert bei mir einwandfrei. If rb1.Enabled = false AndAlso rb2.Enabled = false Then 'Bla End If If rb1.Enabled = false And rb2.Enabled = false Then 'Bla End If If Not rb1.Enabled AndAlso Not rb2.Enabled Then 'bla End If Funktioniert alles ohne Probleme. Zeig uns doch mal den ganzen Code-Ausschnitt. //EDIT: Welche IDE nutzt du? Und bist du dir sicher, dass du auch ein "If" vor den Bedingungen hast? Bearbeitet 10. August 2010 von chrixko Zitieren
Branzetti Geschrieben 10. August 2010 Autor Geschrieben 10. August 2010 Ja das If hab ich ... habe es jetzt mit andalso versucht und es klappt perfekt auch wenn ich nicht verstehe wieso es bei dir auch mit nur and geht! Danke vielmals! If rdb_classik.Enabled = False AndAlso rdb_extrastark.Enabled = False AndAlso rdb_intensiv.Enabled = False AndAlso rdb_Mild.Enabled = False Then MessageBox.Show("Hallo " & txtName.Text & ", dein " & produkte & _ System.Environment.NewLine & "in " & größe & _ System.Environment.NewLine & "jetzt zubereiten?", "Ihr Getränk", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) End If Zitieren
chrixko Geschrieben 10. August 2010 Geschrieben 10. August 2010 Lies dir erstmal den Unterschied zwischen And und AndAlso durch. Könnte in bestimmten Bereichen sehr wichtig werden. Zitieren
Branzetti Geschrieben 10. August 2010 Autor Geschrieben 10. August 2010 Habe ich grade... danke! Kannte den operator garnicht habe erst vor einer woche angefangen! Klappt jetzt alles perfekt danke nochmal für die vielen schnellen antworten! Zitieren
Klotzkopp Geschrieben 10. August 2010 Geschrieben 10. August 2010 die Fehlermeldung ist das der Operator "and" nicht definiert ist!Bitte stell die exakte und vollständige Fehlermeldung hier rein (Copy&Paste), nicht deine persönliche Interpretation. Und es ist auch immer hilfreich, wenn du den Code dazu zeigst. Zitieren
TDM Geschrieben 10. August 2010 Geschrieben 10. August 2010 Seit wann prüft man bools auf Wert? :beagolisc Entweder ist oder ist nicht: If (bHasToBeTrue) Then '... If (Not bHasToBeFalse) Then '... :floet: Zitieren
lilith2k3 Geschrieben 10. August 2010 Geschrieben 10. August 2010 if (!wert1 && !wert2 && !wert3 && !wert4) { //mach was } Man könnte es auch eleganter als !(wert1 || wert2 || wert3 || wert4) schreiben aber das ist wohl Geschmackssache ... Zitieren
lbm1305 Geschrieben 10. August 2010 Geschrieben 10. August 2010 Man könnte es auch eleganter als !(wert1 || wert2 || wert3 || wert4) schreiben aber das ist wohl Geschmackssache ... Noch eleganter wäre die Anwendung des "Chain of Responsibility"-Patterns :-O Zitieren
streffin Geschrieben 11. August 2010 Geschrieben 11. August 2010 (bearbeitet) Und um eventuell nochmal was intresanntes für einen Anfänger zu posten .... (ja ich weis rtfm, aber ma ehrlich, es is netter wenn man die paar Zeilen schreibt.) AndAlso bedeutet, dass die 2. Auswertung, nur dann gemacht wird, wenn die erste zutreffend ist. IF A=1 AndAlso B=2 THEN ....... Beutet, dass nur wenn A den Wert 1 hat, geprüft wird, ob B den Wert 2 hat. Das ist performance technnisch zum Teil durchaus relevant. Vorallem dann, wenn du Rückgabewerte von Funktionen auf ihren wert prüfst in deiner IF. Btw, wenn mer schon am Haarespalten sind : !(wert1 || wert2 || wert3 || wert4) sollte soweit ich das sehe (nein ich schreib da sowas von kein Benchmark für) AndAlso performantisch weit unterlegen sein. Also wenn ihr schon Haare spaltet, dann doch bitte nicht nur rein Syntaktisch, nehm doch bitte da auch noch a bissl tieferen Sinn mit. Gruß Sven Bearbeitet 11. August 2010 von streffin Zitieren
TDM Geschrieben 11. August 2010 Geschrieben 11. August 2010 Btw, wenn mer schon am Haarespalten sind : !(wert1 || wert2 || wert3 || wert4) sollte soweit ich das sehe (nein ich schreib da sowas von kein Benchmark für) AndAlso performantisch weit unterlegen sein. Also wenn ihr schon Haare spaltet, dann doch bitte nicht nur rein Syntaktisch, nehm doch bitte da auch noch a bissl tieferen Sinn mit. Was ist die Grundlage für diese Behauptung? Ich seh das nämlich anders rum: Fall1: Alle true if(!true && !true && !true && !true) 3 Anweisungen: Hole Wert aus Variable Negiere Check -> False if(!(true || true || true || true)) 4 Anweisungen: Hole Wert aus Variable Check -> True Negiere Check -> False Fall2: Alle false if(!false && !false && !false && !false) 13 Anweisungen: Hole Wert aus Variable Negiere Check -> True Hole Wert aus Variable Negiere Check -> True Hole Wert aus Variable Negiere Check -> True Hole Wert aus Variable Negiere Check -> True Führe If-Block aus. if(!(false || false || false || false)) 11 Anweisungen: Hole Wert aus VariableCheck -> falseHole Wert aus VariableCheck -> falseHole Wert aus VariableCheck -> falseHole Wert aus VariableCheck -> falseNegiereCheck -> True Führe If-Block aus. Zusammenfassung: Variante 1: 16 Anweisungen Variante 2: 15 Anweisungen Tja, musst wohl doch einen Benchmark schreiben... Zitieren
streffin Geschrieben 11. August 2010 Geschrieben 11. August 2010 Wie gesagt, grade wenn du rückgabewerte von funktionen vergleichst macht es einen grossen Unterschied, ob du immer alle Werte berechnest und dann prüfst, selbst wenn der erste wert schon reicht um in die ELSE zu gehen, oder ob du alle vergleichst. Und wenn schon, dann ist doch das "holen" von Werten aus Variablen jeweils eine eigene Anweisung Zitieren
TDM Geschrieben 11. August 2010 Geschrieben 11. August 2010 Wie gesagt, grade wenn du rückgabewerte von funktionen vergleichst macht es einen grossen Unterschied, ob du immer alle Werte berechnest und dann prüfst, selbst wenn der erste wert schon reicht um in die ELSE zu gehen, oder ob du alle vergleichst. Ja, das ist schon klar, aber bei && negierst du im Worst-Case (4x false) alle UND prüfst jeden Einzelnen. Bei || prüfst du zwar auch alle, aber negierst am Ende nur einmal. Du solltest bedenken, dass ||, wie &&, auch unter bestimmten Bedingungen (lhs = true) beim ersten Wert aussteigt. :floet: bool'sche Algebra, Fluch oder Segen. :floet: Zitieren
Klotzkopp Geschrieben 11. August 2010 Geschrieben 11. August 2010 Ja, das ist schon klar, aber bei && negierst du im Worst-Case (4x false) alle UND prüfst jeden Einzelnen. Bei || prüfst du zwar auch alle, aber negierst am Ende nur einmal.Du kannst davon ausgehen, dass "negieren" keine eigene Anweisung erfordert. Es läuft immer auf einen Null-Vergleich mit einer nachfolgenden Verzweigung hinaus. Der Unterschied ist dann nur, welche Verzweigungsanweisung benutzt wird. Du solltest bedenken, dass ||, wie &&, auch unter bestimmten Bedingungen (lhs = true) beim ersten Wert aussteigt. :floet:Das tun And und Or in VB nicht. Genau dafür gibt's ja AndAlso und OrElse, die verhalten sich wie && und ||. Eine Entsprechung für And und Or gibt's in C# nicht, es sei denn, man missbraucht die bitweisen Operatoren. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.