2015-11-26 3 views
1

Я знаю, что здесь есть много вопросов относительно этого, но ни один из ответов не работает для меня. Я пытаюсь проверить свою программу, чтобы увидеть, является ли данный вход 1 или 0, и я действительно зашел в тупик. Я все еще новичок в программировании, и Интернет помог загрузить, когда дело доходит до этого, но я не могу найти что-либо.Проверьте, что ввод является целым числом

Эта программа - вещь, которую я делаю для своей курсовой работы, битти, пытающаяся получить это, следующим образом

Public Class Form1 
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim Sensor1, Sensor2, Sensor3, SensorTotal, Temp As Integer 

    Sensor1 = InputBox("Please enter the state of Sensor 1, 0 for off, 1 for on", "System") 
    If Sensor1 = 1 Then PictureBox5.Hide() 

    Sensor2 = InputBox("Please enter the state of Sensor 2, 0 for off, 1 for on", "System") 
    If Sensor2 = 1 Then PictureBox6.Hide() 

    Sensor3 = InputBox("Please enter the state of Sensor 3, 0 for off, 1 for on", "System") 
    If Sensor3 = 1 Then PictureBox7.Hide() 

мне нужно обнаружить, если входной сигнал от каждого датчика уделяется как 1 или 0 из входного окна. тупик был поражен, и я не могу продвинуться дальше в этой программе, пока не найду способ найти способ сделать это.

Необходимо проверить, если данное значение является 1 или 0 как целое число, если его не 1 или 0, что нужно еще раз спросить и продолжайте спрашивать, пока 1 или 0 не дается

+1

Что такое исключение вы получаете? –

+2

У вас есть много типов преобразований, которые вы даже не знаете - вам нужно переключить 'option strict on'. –

+0

@TimSchmelter исключение, которое я получил, было systeminvalidcastexception, потому что я давал ему значения, которые он не мог принять: P, но спасибо людям ниже, я их отсортировал – Karrthus

ответ

1

Вы можете использовать Int32.TryParse и следующие циклы:

Dim Sensor1, Sensor2, Sensor3, SensorTotal, Temp As Integer 
Dim sensor1Valid, sensor2Valid, sensor3Valid As Boolean 
Dim validSensorValues = {0, 1} 

While Not sensor1Valid 
    Dim s1 As String = InputBox("Please enter the state of Sensor 1, 0 for off, 1 for on", "System") 
    sensor1Valid = Int32.TryParse(s1, Sensor1) AndAlso validSensorValues.Contains(Sensor1) 
End While 
If Sensor1 = 1 Then PictureBox5.Hide() 

While Not sensor2Valid 
    Dim s2 As String = InputBox("Please enter the state of Sensor 2, 0 for off, 1 for on", "System") 
    sensor2Valid = Int32.TryParse(s2, Sensor2) AndAlso validSensorValues.Contains(Sensor2) 
End While 
If Sensor2 = 1 Then PictureBox6.Hide() 

While Not sensor3Valid 
    Dim s3 As String = InputBox("Please enter the state of Sensor 3, 0 for off, 1 for on", "System") 
    sensor3Valid = Int32.TryParse(s3, Sensor3) AndAlso validSensorValues.Contains(Sensor3) 
End While 
If Sensor3 = 1 Then PictureBox7.Hide() 
2

Вы должны использовать Integer.TryParse - это, вероятно, лучше всего поместить все это в отдельную функцию:

Public Function GetInputState(sensorNum as Integer) As Integer 
    Dim inputValue as Integer = -1 
    Do 
     Dim inputString = InputBox("Please enter the state of Sensor " & sensorNum & ", 0 for off, 1 for on", "System") 
     If Not Int32.TryParse(inputString, inputValue) then inputValue = -1 
    Loop Until inputValue = 1 OrElse InputValue = 0 
    Return inputValue 
End Function 

Int32.Try Parse return True, если Parse преуспел, поэтому, если синтаксический анализ завершился неудачей, он устанавливает значение -1, чтобы убедиться, что он снова обходит цикл и запрашивает число. Если разбор успешно проверяет значение ноль или 1.

Тогда вы можете быть уверены в том, что введенное значение 1 или 0, как это:

Sensor1 = GetInputState(1) 
Sensor2 = GetInputState(2) 
Sensor3 = GetInputState(3)