If Abfrage "Or"

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Lightsource.

    If Abfrage "Or"

    Hallo, muss für die Schule ein Einschätzungs Programm machen womit man andere Schüler mit Noten bewerten kann, ich möchte mit einer If Abfrage prüfen das in der/einer TextBox ein eine Zahl zwischen 1 und 6 ist. Ich dachte eigentlich das es so geht:

    VB.NET-Quellcode

    1. If TextBox.Text = "1" Or "2" Or "3" Or "4" OR "5" Or "6" Then
    2. .....
    3. ....
    4. .....
    5. Else
    6. MsgBox("Bitte geben Sie eine Zahl zwischen 1 und 6 ein")
    7. End If


    Aber irgendwie funktioniert das nicht, ich kann auch eine andere Zahl wie 14 eingeben .... Brauche Hilfe
    MFG VBWorld
    Mathe ist für alle die, die nicht mit dem Taschenrechner umgehen können :D
    @VBWorld
    Fast:

    VB.NET-Quellcode

    1. If TextBox1.Text = "1" OrAlso TextBox1.Text = "2" Then
    2. MessageBox.Show("")
    3. End If
    4. 'schöner:
    5. With TextBox1
    6. If .Text = "1" OrAlso .Text = "2" OrAlso .Text = "3" Then
    7. MessageBox.Show("")
    8. End If
    9. End With

    Eleganter wäre @Gather 's Lösung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMiy“ ()

    Wie siehts damit aus:

    VB.NET-Quellcode

    1. If Textbox1.text >=1 And Textbox1.text <= 6 Then
    2. End If
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hi
    Konvertiere den Text zu einem Integer und prüfe dann auf 0 < i <= 6 über AndAlso:

    VB.NET-Quellcode

    1. Dim value As Integer
    2. If Not Integer.TryParse(TextBox.Text, value) OrElse value < 1 orelse value > 6 Then
    3. MessageBox.Show("Ungültige Eingabe, geben Sie eine Zahl zwischen 1 und 6 ein, bla bla.")
    4. Return
    5. End If


    @Gather: Keine Vergleiche zwischen Strings und Integern. ;)
    @LaMiy: Bei Booleans sollte man OrElse und AndAlso verwenden. Bei True OrElse x wird bereits abgebrochen, da der rechte Teil keinen Einfluss mehr hat auf die Auswertung. Selbiges bei False AndAlso x. Bei And und Or werden beide ausgewertet.

    Gruß
    ~blaze~
    Benutze switch case Funktion.
    oder Mache VIELE elseif Funktionen rein.

    Beispiel :

    VB.NET-Quellcode

    1. Select Case Variable
    2. Case Wert1
    3. 'Anweisung
    4. Case Wert2
    5. 'Anweisung
    6. Case Else
    7. 'Anweisung
    8. End Select


    LG Keybladmaster
    @~blaze~
    Das habe ich mir schon gedacht.
    Ist hier wirklich eine Konvertierung nötig, da es ja "Noten" sind. Ja eigentlich Zahlen, aber wenn man auf Gleichheit prüft sollte es doch auch so erlaubt sein, oder ?
    BTW: Ich habe gelesen, dass man meine und Gathers Version korrekt so schreiben sollte.

    VB.NET-Quellcode

    1. If "1" = TextBox1.Text Then
    2. '..
    3. End If

    Keybladmaster schrieb:

    Benutze switch case Funktion.
    oder Mache VIELE elseif Funktionen rein.

    Wozu? Man frägt einfach die Strings nicht direkt ab, sondern konvertiert den Wert in eine Zahl, wenn man eh einen Vergleich durchführt. Vergleiche sind nicht Zeichenketten zuzuordnen, außer Gleichheit und Ungleichheit. Da wir aber einen Vergleich auf a zwischen b und c haben, also b <= a <= c, ist es ein Vergleich auf größer und kleiner und somit ein Vergleich zweier Zahlen. Somit einfach in eine Zahl konvertieren und die dann vergleichen.
    Die Alternative von @xtts02 wäre halt nur sinnvoll, wenn wirklich auf Äquivalenz verglichen werden soll. Wenn da jetzt 1 bis 6 drin stehen, macht's keinen wirklichen Sinn.
    @LaMiy: Ist im Prinzip egal, wierum man es macht. Das einzige Problem, bei dem das eine Rolle spielt sind Boolean-Vergleiche in C# und einige Zuweisungen in anderen Sprachen. Wenn man da zum Beispiel statt == aus Versehn = schreibt, kanns eine Zuweisung bedeuten. Wenn dann dasteht if (true = x) schlägts nat. fehl, da man true nichts zuweisen kann (in c zum Beispiel nur per #declare neu definieren). Die Zuweisung if (x = true) würde dann halt in allen Fällen zutreffen.

    Gruß
    ~blaze~
    Das gilt übrigens für jegliche Zuweisungen mit Booleans. Wenn der zweite Teil eh keine Rolle mehr spielt in der Auswertung, kann man einfach OrElse und AndAlso verwenden. And und Or verwendet man eigentlich nur bei bitweisen Operationen zwischen Ganzzahlen.

    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    ~blaze~ schrieb:

    And und Or verwendet man eigentlich nur bei logischen Operationen zwischen Ganzzahlen.
    Du meinst sicher: als Bitweise Operatoren.

    Weil die Logik logischer Operationen ist ja mit AndAlso und OrElse ebenso vollständig, aber trotzdem performanter bedient als mit And und Or.
    Solch boolsche Algebra hat ja mit Zahlen oder egal was nix zu tun, sondern nur mit wahr oder falsch.

    hingegen bitweise Operatoren haben mit Ganzzahlen zu tun - das ist eine ganz annere Baustelle, nur fast dummerweise gibts halt diese Operator-Überladung, dass And und Or auf booleans angewendet was anneres bedeuten als auf Ganzzahlen (bei bitweisen Operationen).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ErfinderDesRades: Jop, sorry, nicht ganz fit. In ein paar wenigen Fällen ist es übrigens zumindest in C# ganz praktisch, das so zu haben. Wenn man zum Beispiel bei mehreren Enumeratoren MoveNext() mit Or verknüpft, können alle gleichzeitig um einen Schritt weiterlaufen. Welcher weitergelaufen ist, ist halt dann über eine Zuweisung zu einer Boolschen Variable abfragbar - wenn auch unschön.

    Gruß
    ~blaze~

    Samus Aran schrieb:

    Bitte andersrum. Was du da hast, ist ne Yoda Condition
    Obwohl verwirrend zu lesen, wird diese Notation bei C/C++ häufig gelehrt, um sicherzustellen, dass der gern gemachte Flüchtigkeitsfehler, einen Vergleich mit nur einem Gleichheitszeichen zu schreiben, vom Compiler angemeckert wird.
    -> de.wikipedia.org/wiki/Yoda_Conditions

    Für VB und C# gibt es keine sinnvolle Begründung für diese Schreibweise, ich mag sie aber auch in C nicht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()