最近我的任务是在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
让我解释一下:
我遇到的问题只有这一部分:(再次,请原谅我的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,如果不是,它会显示错误并跳过转换。
我需要更改什么才能使输入验证按预期工作?
答案 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 ;}