如果语句为真,无论输入如何

时间:2016-11-30 18:40:11

标签: vb.net

最近我的任务是在VB中制作一个计算器。它必须包含逻辑或denary / binary / hex转换等内容。当我进行binary-> denary转换时,我遇到了一个if语句检查输入的数字是否为二进制的东西总是返回true并激活。以下是二进制转换系统的代码:(请原谅我的转到

        Private Sub bbin_Click(sender As Object, e As EventArgs) Handles bbin.Click
        If temp = IsNumeric(inputbox.Text) Then
            MessageBox.Show("Value Not Numeric", "ERROR", MessageBoxButtons.OK)
            inputbox.Text = ""
        Else
            For i = 1 To Len(inputbox.Text)
                If Mid(inputbox.Text, i, 1) <> "0" Or Mid(inputbox.Text, i, 1) <> "1" Then
                    MessageBox.Show("Value Not Binary", "ERROR", MessageBoxButtons.OK)
                    inputbox.Text = ""
                    GoTo skipbin
                End If
            Next
            For x = 1 To Len(inputbox.Text)
                If Mid(inputbox.Text, x, 1) = "1" Then
                    decnum = decnum + 2 ^ (Len(inputbox.Text) - (x - 1))
                End If
            Next
            binnum = inputbox.Text
            inputbox.Text = ""

        End If
        textbox.Text = "Dec = " + decnum.ToString + " Bin = " + binnum.ToString + " Hex = " + hexnum.ToString 
skipbin:
        End Sub

让我解释一下:

  1. 输入框是用户可以输入数字/操作的地方。第一个If检查输入的值是否为数字。
  2. 然后运行检查以确保数字为二进制。 (这是我遇到问题的地方)
  3. 转换已运行。目前它并没有按预期工作,但我确信我能让它发挥作用。
  4. 然后二进制和否定值显示在我用来显示答案的第二个文本框中。
  5. 我遇到的问题只有这一部分:(再次,请原谅我的goto功能)

             For i = 1 To Len(inputbox.Text)
                If Mid(inputbox.Text, i, 1) <> "0" Or Mid(inputbox.Text, i, 1) <> "1" Then
                    MessageBox.Show("Value Not Binary", "I AM ERROR", MessageBoxButtons.OK)
                    inputbox.Text = ""
                    GoTo skipbin
                End If
            Next
    

    它应该检查每个数字,如果它是1或0,如果不是,它会显示错误并跳过转换。

    我需要更改什么才能使输入验证按预期工作?

2 个答案:

答案 0 :(得分:3)

您需要And而不是Or

当你得到一些你无法弄清楚为什么它不起作用的代码时,通常一个好主意是制作显示问题的最小代码 - 删除其他所有内容通常会导致你问题。

在这种情况下,为了确认我的回答是正确的,我使用了这个:

Option Infer On
Option Strict On

Module Module1

    Sub Main()
        Dim s = "000012"
        For i = 1 To Len(s)
            Dim c = Mid(s, i, 1)
            If c <> "0" And c <> "1" Then
                Console.WriteLine("Value Not Binary: {0}", c)

            End If
        Next

        Console.ReadLine()

    End Sub

End Module

您可以使用AndAlso代替And:它可以消除对子句的任何不必要的处理(称为短路)。同样,OrElse代替Or

答案 1 :(得分:1)

您的问题是您的条件结果始终为任何二进制数。 试试这个

if (x < 0) { x *= -1 ;}