2017-02-03 11 views
-1

これは、データ入力の検証にはあまり似ていないようです。私は自分自身がたくさんやっていることが分かっている。手続きを組み合わせたり簡略化する方法はありますか?データ入力の検証

+0

私はあなたがそこで変わることがたくさんあるとは思わない...たぶん、いくつかの行を組み合わせることができますが、それはあなたを助けません。 –

+0

2つのコメント:1.予約されたシステム関数名であるIsNumericという名前を使用しないでください。 2. try/catchを使用して非数値をトラップするのは、これを実行する最善の方法ではありません。エラー処理には大きなオーバーヘッドが関連付けられています。文字列を読んで、システム関数IsNumeric()でテストする方がよいでしょう。 –

+0

@トレヴァーある意味で、私はあなたがそれを言ってうれしいです。 2つのtry catch文を持つのはとても面倒でした。ありがとうございました。編集 - 文字列として宣言し、IsNumeric..thatを使用してください。 – Rich

答えて

1

が..だから IsNumeric関数の名前を変更

Sub IsNumeric(ByRef Variable As Integer) 
    While True 
     Try 
      Variable = CInt(Console.ReadLine()) 
      Exit While 
     Catch 
      Console.WriteLine("Error: Please enter a number:") 
     End Try 
    End While 
End Sub 
Sub Validate(ByVal Variable As Integer, ByVal LandscapeSize As Integer) 
    Dim Size As Integer 
    Size = (LandscapeSize * LandscapeSize) 
    While Variable <= 0 Or Variable >= Size 
     Console.WriteLine("Error: Please enter a number:") 
     While True 
      Try 
       Variable = CInt(Console.ReadLine()) 
       Exit While 
      Catch 
       Console.WriteLine("Error: Please enter a number:") 
      End Try 
     End While 
    End While 
End Sub 

感謝:

をSub Main() ...

Console.Write("Landscape Size: ") 
       IsNumeric(LandscapeSize) 
       Console.Write("Initial number of warrens: ") 
       IsNumeric(InitialWarrenCount) 
       Validate(InitialWarrenCount, LandscapeSize) 
       Console.Write("Initial number of foxes: ") 
       IsNumeric(InitialFoxCount) 
       Validate(InitialFoxCount, LandscapeSize) 

そしてここでは、過度に複雑に見える2つのサブルーチンです代わりにTryParseを使用してtry catchを取り除く

Sub ReadNumber(ByRef Variable As Integer) 
    Do 
     If Integer.TryParse(Console.ReadLine(), variable) Then Exit Sub 
     Console.WriteLine("Error: Please enter a number:") 
    Loop 
End Sub 

Sub Validate(ByVal Variable As Integer, ByVal LandscapeSize As Integer) 
    Dim Size As Integer = LandscapeSize * LandscapeSize 
    While Variable <= 0 Or Variable >= Size 
     Console.WriteLine("Error: Please enter a number:") 
     do 
      If Integer.TryParse(Console.ReadLine(), variable) Then Exit Do 
      Console.WriteLine("Error: Please enter a number:") 
     loop 
    End While 
End Sub 

しかし..私はあなたが本当にバリデーションの最初の変数をByRef NOT ByValにしたいと思っています。

+0

私は非常に感謝しています。 TryParseはより効率的な方法のようです。ありがとうございました。 – Rich