for循环后1迭代
停我的任务的这一部分,我需要做到以下几点:for循环后1迭代
创建一个返回字符串类型的键和整数类型值的排序列表的功能。在函数内部,声明一个与函数返回类型具有相同结构的新排序列表。然后,使用嵌套for循环填充排序列表,查看产品列表和年份列表,以便将产品和年份连接在一起以创建密钥,并从需求表数组中获取相应的需求值作为值将此键输入到排序列表中。
我已经写了下面的代码来做到这一点,但是它在1次迭代后会抛出System.ArgumentException在System.dll中。测试MessageBox将只显示“ModelX 2013 205”,然后将引发错误。
Public Function GetProductDemand() As SortedList(Of String, Integer)
Dim prodDemand As New SortedList(Of String, Integer)
Dim count As Integer = 0
For Each product In products
For Each yr In years
Dim key As String
key = product & " " & yr
For i As Integer = 0 To 4
prodDemand.Add(key, demand(count, i)) 'stops here after 1 iteration
MessageBox.Show(key & " " & prodDemand(key)) 'test to display results
Next
Next
count += 1
Next
Return prodDemand
End Function
为什么会出现这种情况?下面是相关的代码的其余部分:
Dim products As List(Of String)
Dim years As List(Of String)
Dim demandList As SortedList(Of String, Integer)
Dim demand As Integer(,)
Private Sub frmDemand_Load(sender As Object, e As EventArgs) Handles MyBase.Load
products = GetProducts()
years = GetYears()
demand = GetDemand()
demandList = GetProductDemand()
End Sub
Private Function GetDemand() As Integer(,)
Return {
{205, 220, 245, 230},
{160, 174, 152, 144},
{480, 424, 396, 456}
}
End Function
Public Function GetProducts() As List(Of String)
Dim prods As New List(Of String)
prods.Add("ModelX")
prods.Add("ModelY")
prods.Add("ModelZ")
Return prods
End Function
Public Function GetYears() As List(Of String)
Dim yr As New List(Of String)
yr.Add("2013")
yr.Add("2014")
yr.Add("2015")
yr.Add("2016")
Return yr
End Function
我看问题的陈述更接近。我不认为你需要最内层的循环。这里的答案是基于列表的索引:
Public Function GetProductDemand() As SortedList(Of String, Integer)
Dim prodDemand As New SortedList(Of String, Integer)
For i = 0 To products.Length - 1
For j As Integer = 0 To years.Length - 1
Dim key As String = String.Format("{0} {1}", products(i), years(j))
prodDemand.Add(key, demand(i, j))
MessageBox.Show(key & " " & prodDemand(key)) 'test to display results
Next
Next
Return prodDemand
End Function
谢谢你指出。我做了改变,但同样的事情仍在发生。 –
啊我明白了。我试图解决的问题是在帖子的开头。也许你可以建议一个更好的方法来做到这一点?问题措辞的方式有点混乱。 –
@TheGamingGrunts:在仔细阅读问题之后,我认为你完全不需要'For I As Integer = 0 To 4'循环。我会更新我的答案。 –
'prodDemand.Add(key,demand(count,i))'我们可以看到prodDemand和demand吗?我认为你在循环的第二次迭代中用不正确的参数来调用它/它们。 –
@ blaze_125:你是对的 - “SortedList”基本上是一个字典,并且多次添加相同的键会引发错误(重复键)。 –