VB没有正确地遵循关系运算符

时间:2018-06-06 18:56:37

标签: vb.net

这是我的代码:

Dim Choice As String
Dim FinalChoice As Integer

Console.Writeline("Insert the number 1 or 2")
Choice = Console.Readline

    'Verification
    Do
        'Invalid
        If Choice <> "1" Or Choice <> "2" Then
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("Not a valid input")
            Console.WriteLine("Please try again")
            Console.ForegroundColor = ConsoleColor.Gray
            Choice = Console.ReadLine

            'Valid
        Else
            Console.ForegroundColor = ConsoleColor.Green
            Console.WriteLine("Valid")
            Console.ForegroundColor = ConsoleColor.Gray
            FinalChoice = Choice
        End If
    Loop Until FinalChoice = 1 Or FinalChoice = 2

Picture of Outcome

正如您所看到的,代码没有像我想的那样。

请有人向我解释我做错了什么?

3 个答案:

答案 0 :(得分:1)

当您使用OR运算符时,如果 子条件为true,则整个复合条件为真。因此,如果CHOICE = "1",则子条件CHOICE <> "2"为真,因此整个条件为真。

如果您只想允许两种可能的选择,那么如果子条件1 子条件2都无效,则您希望陷入无效情况 - 如果其中任何一个< em>有效,您需要像处理选择一样进行处理。

因此,您的情况应为IF CHOICE <> "1" AND CHOICE <> "2"

答案 1 :(得分:1)

我想您希望程序循环直到用户输入12

If Choice <> "1" Or Choice <> "2" Then转换为选项不是1或选项不是2,则输入无效。

现在,如果您输入的1符合条件Choice <> "2",则无效。当用户输入2和选择&lt;&gt;时也是如此。 “1”

您应该将中间的Or更改为And,我认为您会看到所需的结果。

答案 2 :(得分:0)

使用正确的操作员纠正您的解决方案。

    Console.WriteLine("Insert the number 1 or 2")
    Choice = Console.ReadLine

    'Verification
    Do
        'Invalid
        If Choice <> "1" AndAlso Choice <> "2" Then
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("Not a valid input")
            Console.WriteLine("Please try again")
            Console.ForegroundColor = ConsoleColor.Gray
            Choice = Console.ReadLine

            'Valid
        Else
            Console.ForegroundColor = ConsoleColor.Green
            Console.WriteLine("Valid")
            Console.ForegroundColor = ConsoleColor.Gray
            FinalChoice = Integer.Parse(Choice)
        End If
    Loop Until FinalChoice = 1 Or FinalChoice = 2

注意使用And,AndAlso的短路版本。此外,FinalChoice的分配也已修复。

替代

    'Verification
    Do
        If Integer.TryParse(Choice, FinalChoice) AndAlso
            (FinalChoice = 1 OrElse FinalChoice = 2) Then
            'valid

            Console.ForegroundColor = ConsoleColor.Green
            Console.WriteLine("Valid")
            Console.ForegroundColor = ConsoleColor.Gray
        Else
            'invalid
            FinalChoice = 0
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("Not a valid input")
            Console.WriteLine("Please try again")
            Console.ForegroundColor = ConsoleColor.Gray
            Choice = Console.ReadLine
        End If
    Loop While FinalChoice = 0