为什么else语句不会运行?

时间:2016-02-21 03:42:42

标签: vb.net

我正在编写一个函数来检查数组中的所有元素是否相等,但由于某种原因,即使if条件不为TRUE,else语句也似乎永远不会运行。有这种奇怪行为的原因吗?我实际上显示了布尔表达式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

1 个答案:

答案 0 :(得分:1)

这里有不少错误,我会稍微解释一下......

首先,我将使用Linq做什么。只需确保{class 1}}位于班级文件的顶部...

Import System.Linq

功能细分

  • 确保阵列不是什么。
  • 我们有多个项目,因此我们可以比较阵列中的其他项目。
  • 最后进行项目的比较。与{{li>>中的所有项目相比,Public Function IsEqual(ByVal a As Integer()) As Boolean Return a IsNot Nothing AndAlso a.count > 0 AndAlso a.Distinct.Count() = 1 End Function 将返回True或False的布尔值。

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

您的问题

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

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

  3. 您可以在所有内容之前将If Not (i + 1 = a.Length) Then变量声明为False。然后,如果项目不相等的任何地方返回false或将布尔值设置为false并返回...

  4. 旁注

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