comps。即使comps包含,它也不会返回TRUE。
我已逐步调试它,但看不到问题出在哪里。
顺便说一句,代码的目的是显示总计为SUM值的对。 (如果总和为5,并且有1和4,则代码应返回1和4)
Public Function getPairs(ByVal array As ArrayList, ByVal sum As Integer)
Dim comps, pairs As New ArrayList
For index = 0 To array.Count - 1
If (comps.Contains(array(index)) = True) Then
pairs.Add(array(index))
Else
comps.Add(sum - array(index))
End If
Next
Return pairs
End Function
Sub Main()
' 1,3,2,5,46,6,7,4
' k = 5
'Dim arraylist As New ArrayList()
Console.Write("Enter your array :")
Dim arraylist As New ArrayList
arraylist.AddRange(Console.ReadLine().Split(","))
Console.Write("Enter the sum:")
Dim sum As Integer = Console.ReadLine()
getPairs(arraylist, sum)
Console.ReadKey()
End Sub
答案 0 :(得分:1)
您从用户输入中填充的ArrayList包含字符串(拆分用户输入字符串的结果)。 comps ArrayList包含整数(减法结果)。当它试图在包含2的ArrayList中找到字符串“ 2”时,它将失败。
您应该将用户输入转换为整数,以便比较相同的数据类型。
答案 1 :(得分:1)
首先,打开Option Strict。工具菜单->选项->项目和解决方案-> VB默认值。这将指出您的代码存在问题,并帮助您避免运行时错误。
ArrayList在新代码中很少使用,但是它是为了向后兼容。 List(Of T)是新代码的更好选择。
Module Module1
Sub Main()
' 1,3,2,5,46,6,7,4
' k = 5
'Dim arraylist As New ArrayList()
Console.Write("Enter your array :")
Dim arraylist As New ArrayList
'Option Strict would not allow this line to compile
'.Split takes a Char, the same c tells the compiler that "," is a Char
arraylist.AddRange(Console.ReadLine().Split(","c))
Console.Write("Enter the sum:")
'Option Strict would not allow a string to be dumped into an integer
Dim sum As Integer
Dim Pairs As New ArrayList
If Integer.TryParse(Console.ReadLine, sum) Then
'Your Function returns an array list but you
'throw it away by not setting up a variable to receive it
Pairs = getPairs(arraylist, sum)
Else
Console.WriteLine("Program aborted. Sum was not a number.")
End If
For Each item In Pairs
Console.WriteLine(item)
Next
Console.ReadKey()
End Sub
'Functions need a return data type in the declaration
Public Function getPairs(ByVal array As ArrayList, ByVal sum As Integer) As ArrayList
Dim comps, pairs As New ArrayList
For index = 0 To array.Count - 1
'I don't see how this can ever be true since comps is empty
If comps.Contains(array(index)) Then 'Since .Contains returns a Boolean, no = True is necessary
pairs.Add(array(index))
Else
'Ideally each item in array should be tested to see if it is a number
'You will get an exception if CInt fails
comps.Add(sum - CInt(array(index)))
'You never use the comps ArrayList
End If
Next
'The pairs ArrayList is empty
Return pairs
End Function
End Module
我看不出这段代码如何实现您所描述的目标。我认为您应该重新开始。讨论如何完成任务。然后将其写在纸上,而不是代码中。然后,您将更清楚地看到如何对项目进行编码。
答案 2 :(得分:0)
最大的问题是原始代码是这一行:
Dim comps, pairs As New ArrayList
该代码创建了两个ArrayList
参考变量,但是只创建了一个ArrayList object 。 comps
仍为null
/ Nothing
。
但是除此之外,{。{1}}类型自从.Net 2.0于2005年问世以来……已经有10多年了。它仅在今天才存在,以便与旧代码向后兼容。 请勿使用!
这是更好的做法,尤其是与ArrayList
和Option Strict
结合使用:
Option Infer