【问题标题】:Assigning a value to array in visual basic在visual basic中为数组赋值
【发布时间】:2017-03-19 21:12:56
【问题描述】:

此 Visual Basic 程序会提示用户 以交互方式输入 4 个整数值,程序 存储在一个数组中。然后它应该找到最小值和最大值 存储在数组中的值,以及 4 个值的平均值。 代码是

Option Explicit On
        Option Strict On
        Module BattingAverage
       Sub Main()
            Const MAX_AVERAGES AS Integer = 3
            Dim Averages(MAX_AVERAGES -1) as Double
            Dim LoopIndex As Integer
            Dim BattingAverage As Double
            Dim BattingString As String        
            Dim Min As Double
            Dim Max As Double
            Dim Total As Double
            Dim Average As Double

                For LoopIndex = 0 To MAX_AVERAGES - 1
                BattingString = InputBox$("Enter a batting average: ")
                BattingAverage = Convert.ToDouble(BattingString)

              'Assigning a value to Array
                Averages(LoopIndex) += BattingAverage

            Next LoopIndex

            Min = Averages(0)
            Max = Averages(0)
                   Total = Averages(0)
                    For LoopIndex = 1 To Averages.length -1
            If Averages(LoopIndex) < Min then

            Min = Averages(LoopIndex)
            Else If Averages(LoopIndex) > Max then
            Max = Averages(LoopIndex)
            end if
              Total += Averages(LoopIndex)
             ' 
        Next LoopIndex
                Average = Total / MAX_AVERAGES
                System.Console.WriteLine("Batting Averages : " & Averages(LoopIndex))
                System.Console.WriteLine("Maximum value : " &Max)
            System.Console.WriteLine("Minimum value : " &Min)
            System.Console.WriteLine("Average : " &Average)
       End Sub
    End Module

我运行了代码,但它抛出了这个 indexoutofbound 异常

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at BattingAverage.Main()

我不确定如何修复此代码。我也认为我的代码(Averages(LoopIndex) += BattingAverage)给数组赋值是不对的。请帮忙

【问题讨论】:

  • += 增加当前值,= 分配一个新值。

标签: arrays vb.net for-loop


【解决方案1】:

这里有几个问题。首先,如果要取 4 个值,则需要更改 MAX_AVERAGES = 4。错误来自这一行

System.Console.WriteLine("Batting Averages : " & Averages(LoopIndex))

因为此处 LoopIndex 已递增到 3,超出了大小为 3 的数组的范围。Averages(2) 是最后一个索引。您应该将行更改为

Console.WriteLine("Batting Averages: ")
For i = 0 To Averages.Length - 1
    Console.WriteLine(Averages(i).ToString)
Next

【讨论】:

    【解决方案2】:

    obl 在上面的数组大小部分是正确的,并且在打印部分很接近。

    您的原件:

                    System.Console.WriteLine("Batting Averages : " & Averages(LoopIndex))
                    System.Console.WriteLine("Maximum value : " &Max)
                System.Console.WriteLine("Minimum value : " &Min)
                System.Console.WriteLine("Average : " &Average)
           End Sub
    

    应该怎么读:

             For LoopIndex = 0 To 3
               System.Console.WriteLine("Batting Averages : " &Averages(LoopIndex))
             Next
                System.Console.WriteLine("Maximum value : " &Max)
                System.Console.WriteLine("Minimum value : " &Min)
                System.Console.WriteLine("Average : " &Average)
    
       End Sub
    

    代码无法根据您的数组的大小执行,因为您的代码读取它应该打印数组中的所有值,如果您的数组大小只有一个值,它本来可以打印。所以,你需要一个 For LoopIndex = "bounds of the array" 才能工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多