Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

das is für c# richtig? funktioniert das auch in Vb??

danke schonmal

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.

die Fehlermeldung ist das der Operator "and" nicht definiert ist!

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

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

Lies dir erstmal den Unterschied zwischen And und AndAlso durch. Könnte in bestimmten Bereichen sehr wichtig werden.

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!

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

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

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:

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

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:

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.