我正在编写一个函数来检查数组中的所有元素是否相等,但由于某种原因,即使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
答案 0 :(得分:1)
这里有不少错误,我会稍微解释一下......
首先,我将使用Linq
做什么。只需确保{class 1}}位于班级文件的顶部...
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
将返回True或False的布尔值。注意:不适合以这种方式比较某些对象......
您的问题
第一个问题是:.Distinct.Count() = 1
。对于数组,应从For i As Integer = 1 To a.Length - 1
开始。所以它应该是这样的:0
。
接下来是:For i As Integer = 0 To a.Length - 1
。这是您抛出If a(i) = a(i + 1) Then
异常的地方,因为在IndexOutOfRange
处可能没有索引。解决方案:在尝试访问该索引之前检查a(i + 1)
...
您可以在所有内容之前将If Not (i + 1 = a.Length) Then
变量声明为False。然后,如果项目不相等的任何地方返回false或将布尔值设置为false并返回...
旁注
实现一些Boolean
块来捕获和处理错误。转动Try Catch
...如果你有这个,它会说一些关于这个功能的东西可能不会返回任何东西(不能记住这个消息到底是什么)。