-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にしたいと思っています。
私は非常に感謝しています。 TryParseはより効率的な方法のようです。ありがとうございました。 – Rich
私はあなたがそこで変わることがたくさんあるとは思わない...たぶん、いくつかの行を組み合わせることができますが、それはあなたを助けません。 –
2つのコメント:1.予約されたシステム関数名であるIsNumericという名前を使用しないでください。 2. try/catchを使用して非数値をトラップするのは、これを実行する最善の方法ではありません。エラー処理には大きなオーバーヘッドが関連付けられています。文字列を読んで、システム関数IsNumeric()でテストする方がよいでしょう。 –
@トレヴァーある意味で、私はあなたがそれを言ってうれしいです。 2つのtry catch文を持つのはとても面倒でした。ありがとうございました。編集 - 文字列として宣言し、IsNumeric..thatを使用してください。 – Rich