【问题标题】:Try...Catch...Finally To check for string VB.NetTry...Catch...Finally 要检查字符串 VB.Net
【发布时间】:2013-12-26 18:54:17
【问题描述】:

我正在尝试根据我之前制作的程序制作一个程序,该程序将平均 10 个数字,并在输入字母时捕获异常。没有检查字母的旧代码是

Module Module1
Sub Main()
    Dim Input As Decimal
    Console.WriteLine("Press the numbers you would like to average and press enter after each number.")
    Console.WriteLine("After the tenth number all the numbers will be averaged together.")
    Input = Console.ReadLine
    Console.WriteLine((Input + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine) / 10)
    Console.ReadKey()
End Sub
End Module

我目前拥有的新程序如下,我遇到了各种各样的问题,因此不胜感激。

Module Module1

Public Sub Main()
    Dim input As Object

    Console.WriteLine("Press the numbers you would like to average and press enter after each number.")
    Console.WriteLine("After the tenth number all the numbers will be averaged together.")
    input = Console.ReadLine
    If Char.IsNumber(Console.ReadLine) Then
        Console.WriteLine((Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine + Console.ReadLine) / 10)
        Console.ReadKey()
    End If
    If Not IsNumeric(Console.ReadLine) Then
        Try
        Catch ex As System.Exception
            System.Console.WriteLine("Please enter a number")
        Finally
            System.Console.WriteLine("Try again without entering any letters")
        End Try
        Console.ReadKey()
    End If



End Sub

End Module

【问题讨论】:

  • 您能否更明确地说明您遇到的错误?
  • 定义“各种问题”...读心技巧在清洁工
  • 由于某种原因,不是平均数字,而是以某种奇怪的方式相乘,我必须输入 3 个不同的字母才能显示异常消息。
  • 每次调用Console.ReadLine都会返回给用户输入。这些检查中只有两个具有数字。此外,Try 块中没有任何内容。

标签: vb.net exception exception-handling try-catch average


【解决方案1】:

Try/Catch 不能那样工作。该块将执行 Try 和 Catch 之间的任何代码,如果此代码中发生异常,它将转到 Catch-Code。无论如何,最终代码都会在之后执行。你的方法不是很简单。我会建议类似:

Sub Main()
    Console.WriteLine("Please enter ten numbers.")
    Dim nums As New List(Of Double)
    Do
        Dim input As String = Console.ReadLine
        If IsNumeric(input) Then
            nums.Add(CDbl(input))
            Console.WriteLine("Ok. Please enter " & (10 - nums.Count).ToString & " more numbers.")
        ElseIf input = "exit" Then
            Exit Sub
        Else
            Console.WriteLine("Please enter only numeric values. Please try again.")
        End If
    Loop Until nums.Count >= 10
    Dim res As Double = 0
    For i = 0 To nums.Count - 1
        res += nums(i)
    Next
    Console.WriteLine("----------------")
    Console.WriteLine("Average value: " & (res / nums.Count).ToString)
    Console.ReadKey()
End Sub

这不使用 Try/Catch。相反,它检查输入的每一行是否为数字。如果是这样,则将该数字添加到 List(Of Double) 以供以后计算平均值。如果不是数字,将显示一条消息,您必须重试。这一直持续到输入 10 个有效数字。然后计算平均值并显示出来。

【讨论】:

  • List 有一个 Average 方法和一个 Sum 方法,您可以使用它们而不是遍历列表来添加它。
  • 确实如此。出于某种原因,我从未想过这些 :-)
  • @Jens 感谢您的帮助,但是对于这个特定的程序,我必须使用 Try...Catch....最后以某种方式。你会建议我怎么做?
猜你喜欢
  • 2014-11-27
  • 1970-01-01
  • 2011-02-20
  • 2019-02-28
  • 1970-01-01
  • 2011-10-31
  • 2014-04-27
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多