2013-12-17 71 views
0
comdata(0, 0) = "5" 
comdata(0, 1) = "3" 
comdata(0, 2) = "10" 
comdata(0, 3) = Nothing 
comdata(1, 0) = "1" 
comdata(1, 1) = "7" 
comdata(1, 2) = "14" 
comdata(1, 3) = Nothing 
comdata(2, 0) = "5" 
comdata(2, 1) = "8" 
comdata(2, 2) = "14" 
comdata(2, 3) = Nothing 

我有一个如上所示的数组。我想制作下面的内容。这个想法是当数组comdata(,)上有相同的值时,例如comdata(0,0)和comdata(2,0)上有两个值5。我想设置comdata(2,0)的值。vb.net中的数组循环

choose(0,0) = True 
choose(0,1) = True 
choose(0,2) = True 
choose(0,3) = False 
choose(1,0) = True 
choose(1,1) = True 
choose(1,2) = True 
choose(1,3) = False 
choose(2,0) = False 
choose(2,1) = True 
choose(2,2) = False 
choose(2,3) = False 

我有下面的代码尝试,不幸的是当I = 2的值,就不能检查comdata(0,0),comdata(0,1),comdata(0,2), comdata(0,3)。所以选择(0,0),选择(0,1),选择(0,2)的值将被设置为true。

For i = 0 To 2 
    For j = 0 To 2 
     If comdata(i, j) <> Nothing Then 
      If i = 0 Then 
       choose(i, j) = True 
      Else 
       For k = 0 To 2 
        If comdata(i, j) = comdata(i - 1, k) Then 
         choose(i, j) = False 
        Else 
         choose(i, j) = True 
        End If 
       Next 
      End If 
     End If 
    Next 
Next 
+0

是很重要的是匹配值的第二个指标是在两种情况下相同的时'choose'设置为'FALSE'上一个非空实例?例如,如果'comdata(0,0)'和'comdata(1,2)'都是''5“',应该将”(1,2)“设置为'False'? – dasblinkenlight

回答

1

这是有点混淆你想要做的事情。当你为“k”循环时,你只需要在“i”内查找值,你需要检查所有的值。你也只能循环2当你的数组可以definetly去3.

For x As Integer = 0 To 2 
     For y As Integer = 0 To 3 
      If x = 0 And y = 0 Then 
       choose(x, y) = True 
      ElseIf comdata(x, y) IsNot Nothing Then 
       choose(x, y) = True 

       For u As Integer = 0 To 2 
        For v As Integer = 0 To 3 
         If x = u And y = v Then 
          Exit For 
         End If 

         If comdata(x, y) = comdata(u, v) Then 
          choose(x, y) = False 
         End If 
        Next 

        If u = x Then 
         Exit For 
        End If 
       Next 
      End If 
     Next 
    Next 
0

一些你的代码没有意义对我说:我看不出有什么的If i = 0 Then ...的目的是什么。这会将您的前三个元素设置为True,即使其中两个元素没有重复。现在忽略这一点,并继续...

你试图做三个循环,但你需要使用四个:两个外部循环(ij定义当前正在比较的元素)和两个内部循环(k和定义要比较的元素的新循环)。

因此,如果您目前使用的是comdata(i - 1, k),则需要进一步循环(For l = 0 To 2)并用l替换i - 1

请注意,在这种情况下,您将需要更多的守卫子句,因为在您的循环中的某个位置,您会将您的元素与自身进行比较。也就是说,如果i = lj = k那么你应该而不是进行比较 - 否则每个元素将自己视为重复。

+0

其实我使用'如果我= 0然后。 。 .'始终给出前三个元素的真实值。
对不起,我对如何实施您的建议有点困惑。您想在此评论部分编写代码吗?谢谢 – dipa

+0

我现在也很困惑:为什么前三个元素总是如此?另外,我现在注意到'j'上的循环只是'0'到'2' - 这是故意的吗? –