【问题标题】:VB .Net - Array index is out of range errorVB .Net - 数组索引超出范围错误
【发布时间】:2014-06-24 08:24:08
【问题描述】:

我是 VB.Net 的新手。我的任务是使用InterfacePowerSquareCube 编写用户方法。当我编译代码时,我得到了错误:

Exception Caught: Array index is out of range

我不知道我在哪里犯了错误。我刚开始学习VB.Net。

接口源代码如下:

Interface Calc
    Sub Square(ByVal number As Double)
    Sub Cube(ByVal number As Double)
    Sub Power(ByVal number As Double, ByVal raiseTo As Double)
End Interface

这是我实现上述接口的类的源代码:

Class Calculation
    Implements Calc

    Sub Square(ByVal number As Double) Implements Calc.Square
        Console.WriteLine("Square of " & number & " = " (number * number))
    End Sub

    Sub Cube(ByVal number As Double) Implements Calc.Cube
        Console.WriteLine("Power of " & number & " = " (number * number * number))
    End Sub

    Sub Power(ByVal number As Double, ByVal raiseTo As Double) Implements Calc.Power
        Console.WriteLine("Power of " & number & " = " (number ^ raiseTo))
    End Sub
End Class

这是主要的方法:

Sub Main()
    Console.WriteLine(vbCrLf & vbTab & "********** Calculation Using Interface *********")

    Dim obj As Calculation = New Calculation()

    Try
        obj.Square(5.0)
        obj.Cube(5.0)
        obj.Power(5.0, 4.0)
    Catch ex As Exception
        Console.WriteLine(vbCrLf & "Exception Caught: " & ex.Message.ToString())
    End Try

    Console.WriteLine(vbCrLf & "Press any key to exit....")
    Console.ReadLine()
End Sub

【问题讨论】:

  • 你在哪里得到错误??
  • 嗯...Console.WriteLine("Square of " & number.ToString() & " = " & (number * number).ToString())(缺少运算符,缺少.ToString())等?
  • @hector 我不知道.. 没有具体的行。
  • @AndrewMorton 尝试了您的解决方案,但同样的错误...
  • 您应该打开 Option Strict。您的代码不会在打开的情况下编译。这将允许您在设计时而不是运行时发现错误。

标签: .net arrays vb.net exception string-concatenation


【解决方案1】:

在您的输出中,您正在连接一个字符串,但您在连接中错过了一个 &

这一行:

Console.WriteLine("Square of " & number & " = " (number * number))

应该是:

Console.WriteLine("Square of " & number & " = " & (number * number))

错误消息是(我认为)由于编译器将" = " 作为字符串数组评估并试图返回它的(number * number) th 元素。考虑以下几点:

Console.WriteLine((New String("foo"))(1)) 'this fails

附带说明,您应该切换Option Strict OnSee here for reasons why。这不会解决您的问题,但在您解决此问题之前不会编译代码。

在部署应用程序之前花时间修复编译时错误比尝试远程调试运行时错误要好得多。

【讨论】:

  • Wilko yes ofcource Console.WriteLine("Square of " & number.ToString() & " = " & (number * number).ToString()) 这绝对可行
  • @Matt,感谢您指出错误。也感谢您提供的链接,这些对像我这样的初学者真的很有帮助
【解决方案2】:

试试这个

Public Class Calculation
Implements CalcIFace
Sub Square(ByVal number As Double) Implements CalcIFace.Square
    Console.WriteLine("Square of " & number & " = " & number * number & "")
End Sub
Sub Cube(ByVal number As Double) Implements CalcIFace.Cube
    Console.WriteLine("Power of " & number & " = " & number * number * number & "")
End Sub
Sub Power(ByVal number As Double, ByVal raiseTo As Double) Implements CalcIFace.Power
    Console.WriteLine("Power of " & number & " = " & number ^ raiseTo & "")
End Sub
End Class
  • 在 OP 的方法中,连接错误

  • OP 做了Console.WriteLine("Square of " & number & " = " (number * number)),这应该像Console.WriteLine("Square of " & number & " = " & (number * number)) 一样正确连接

【讨论】:

  • 您能否为您的答案添加一些解释。 OP 可能一开始就复制并粘贴了您的答案,但不了解问题所在
  • 问题与括号无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多