Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (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 von Branzetti
Geschrieben
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.

Geschrieben (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 von chrixko
Geschrieben

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

Geschrieben
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.
Geschrieben
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

Geschrieben (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 von streffin
Geschrieben

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 Variable
  • Check -> false
  • Hole Wert aus Variable
  • Check -> false
  • Hole Wert aus Variable
  • Check -> false
  • Hole Wert aus Variable
  • Check -> false
  • Negiere
  • Check -> True
  • Führe If-Block aus.

Zusammenfassung:

Variante 1: 16 Anweisungen

Variante 2: 15 Anweisungen

Tja, musst wohl doch einen Benchmark schreiben... :rolleyes:

Geschrieben

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

Geschrieben
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:

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...