【问题标题】:Why won't the else statement run?为什么 else 语句不运行?
【发布时间】:2016-02-21 03:42:42
【问题描述】:

我正在编写一个函数来检查数组中的所有元素是否相等,但由于某种原因,else 语句似乎永远不会运行,即使 if 条件不为真。这种奇怪的行为有什么原因吗?我实际上显示了布尔表达式a(i) = a(i + 1) 的结果,它是错误的。这里会发生什么?

VB.NET 代码:

Function EqualItems(ByVal a As Integer())
    For i As Integer = 1 To a.Length - 1
        If a(i) = a(i + 1) Then
            If i + 1 = a.Length Then
                Return True
            End If
        Else
            Return False
        End If
    Next
End Function

【问题讨论】:

  • 单步调试代码时调试器会显示什么?

标签: vb.net


【解决方案1】:

这里有很多地方不对,我会稍微解释一下……

首先,我将使用Linq 进行操作。只要确保 Import System.Linq 在你的类文件的顶部...

Public Function IsEqual(ByVal a As Integer()) As Boolean
    Return a IsNot Nothing AndAlso a.count > 0 AndAlso a.Distinct.Count() = 1                   
End Function

功能分解

  • 确保数组不是空的。
  • 我们有多个项目,因此我们可以比较数组中的其他项目。
  • 最后对项目进行比较。 .Distinct.Count() = 1 将返回一个布尔值 True 或 False 与数组中的所有项目进行比较...

注意:这种方式不适合比较某些对象...

您的问题

  1. 第一个问题是这样的:For i As Integer = 1 To a.Length - 1。对于数组,应该从 0 开始。所以它应该是这样的:For i As Integer = 0 To a.Length - 1

  2. 接下来是:If a(i) = a(i + 1) Then。这是您将抛出IndexOutOfRange 异常的地方,因为可能没有索引:a(i + 1)。解决方案:If Not (i + 1 = a.Length) Then 在尝试访问该索引之前检查...

  3. 您可以在一切之前将 Boolean 变量声明为 False。然后,如果任何地方的项目不相等,则返回 false 或将布尔值设置为 false 并返回...

附注

实现一些Try Catch 块来捕获和处理错误。转Option Strict On...如果你有这个,它会说一些关于这个函数可能不会返回任何东西(不记得那个消息到底是什么)。

【讨论】:

  • 非常感谢。顺便问一下,Linq 是什么?我已经在学校使用 VB.NET 大约 3-4 个月了,所以我对 .NET 的其余部分还不熟悉。
  • 它有powerful query capabilites。称为语言集成查询
  • 不仅我提供给您的函数返回了您实际需要的内容,而且它还检查是否存在任何内容,并且我们在一个语句中要比较多个项目:)
  • 太棒了!可以用 Linq 来搜索多维数组吗?
  • Linq 功能强大,可以做很多事情,有些人不赞成使用它。有一些优点和缺点,但我在项目中多次使用它并且工作良好。
猜你喜欢
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多