【问题标题】:VB.net For loop wrong iVB.net For 循环错误我
【发布时间】:2021-03-22 16:21:49
【问题描述】:

我不知道它发生了什么或为什么会发生。在下面的代码中,第一次运行 i = 0。工作正常。最后 i = 2。也很好。但是,由于某种我无法理解的原因,突然 i = 3。这给出了 System.ArgumentOutOfRangeException,我理解,因为列表中只有 4 项。

如何将 i 从 2 变为 3?

noOfSpeedLimiterPositions = speedLimiterPositions.count() '= 4
    
For i = 0 To noOfSpeedLimiterPositions - 1
    speedLimiterPosition = speedLimiterPositions(i)
    nextSection = speedLimiterPosition + speedLimiterPositions(i + 1) 'exception thrown here
        
    While speedLimiterPosition < nextSection
        rollerSpeedLimiterPositions.add(speedLimiterPosition)
        speedLimiterPosition = speedLimiterPosition + 57.5 * 2
    End While
    MessageBox.Show(i) 'shows 0
    i = i + 2
    MessageBox.Show(i) 'shows 2
Next

【问题讨论】:

  • noOfSpeedLimiterPositions 的值是多少?
  • 我非常精通 VB.NET,但我什至不知道如果在循环中间更改循环变量的值会发生什么。最好不要这样做,它会导致代码难以理解(如您所见)。如果您想要 1 以外的其他增量,请改用 For ... To ... Step ...
  • @Heinzi,这行得通。谢谢。

标签: vb.net


【解决方案1】:

如上所述,我现在使用步骤:

noOfSpeedLimiterPositions = speedLimiterPositions.count()
    
For i = 0 To noOfSpeedLimiterPositions - 1 Step 2
    speedLimiterPosition = speedLimiterPositions(i)
    nextSection = speedLimiterPosition + speedLimiterPositions(i + 1)
        
    While speedLimiterPosition < nextSection
        rollerSpeedLimiterPositions.add(speedLimiterPosition)
        speedLimiterPosition = speedLimiterPosition + 57.5 * 2
    End While
Next

【讨论】:

  • 这是因为集合中有偶数个项目(如问题所示)。如果您有奇数个项目会发生什么?即,speedLimiterPositions.Count()5 而不是 4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多