大家早上好!所以我收到了这个暑假的家庭作业,我必须创建一个程序来存储电影列表并显示它们,但问题是没有定义的电影数量,所以我不能使用我一直使用的常量方法,所以我试着用变量代替,但每当我按两次输入按钮时,应用程序崩溃了,我得到了错误"索引超过矩阵限制";下面是模块
中的代码Module Module1
Public Structure Film
Public Titolo As String
Public Autore As String
Public Incasso As Integer
Public Nazionalita As String
End Structure
Public i As Integer = 0
Public Flm(i) As Film
End Module
输入部分
Public Class frmInput
Private Sub btnInserisci_Click(sender As Object, e As EventArgs) Handles btnInserisci.Click
If IsNumeric(txtIncasso.Text) = False Then
MsgBox("L'incasso deve essere un valore numerico", MsgBoxStyle.Exclamation, "Attenzione")
ElseIf txtTitolo.Text = "" Or txtAutore.Text = "" Or txtNazionalita.Text = "" Then
MsgBox("Uno o più valori sono vuoti", MsgBoxStyle.Exclamation, "Attenzione")
Else
Flm(i).Titolo = txtTitolo.Text
Flm(i).Autore = txtAutore.Text
Flm(i).Incasso = txtIncasso.Text
Flm(i).Nazionalita = txtNazionalita.Text
i += 1
End If
End Sub
End Class
您应该使用List(Of Film)来存储接收到的输入。
像这样的泛型列表没有实际限制,并且可以在添加元素时增长
Public Flm As List(Of Film) = new List(Of Film)
....
Else
Dim f as Film = new Film()
f.Titolo = txtTitolo.Text
f.Autore = txtAutore.Text
f.Incasso = txtIncasso.Text
f.Nazionalita = txtNazionalita.Text
Flm.Add(f)
End If
List(Of Film)可以像数组一样使用
For x As Integer = 0 To Flm.Count -1 Step 1
Console.WriteLine("Film #" & x+1)
Console.WriteLine("Titolo = " & Flm(x).Titolo)
.....
Next
当然你可以用更简单的foreach
来遍历它For Each Film f in Flm
Console.WriteLine("Film #" & x+1)
Console.WriteLine("Titolo = " & f.Titolo)
.....
Next
虽然其他人已经提到使用List
(这可能是合适的),但您还提到这是一个家庭作业,因此您可能需要或必须使用您所展示的更传统的数组。记住这一点,也让你知道你的问题是什么。您正在增加i
,而不是数组。
Public i As Integer = 0
Public Flm(i) As Film
因此,Flm是0到0,一个元素。
你加上这个,一切都可以。
你增加i, good,i += 1
然而,你不增加数组,Flm()
。增加i
不会自动增加数组,Flm()
.
您需要使用:ReDim Preserve
因此…变化:
Else
Flm(i).Titolo = txtTitolo.Text
:
Else
ReDim Preserve Flm(i)
Flm(i).Titolo = txtTitolo.Text
最后,IsNumeric
和MsgBox
是VB6时代的残余,有vb.net的等同物。此外,使用i
作为全局/公共变量确实不好。在所有局部子程序和小循环等函数中使用i
是非常常见的,标准的,它被使用和丢失。如果你看一下几乎所有的代码示例,你会看到i
被用作整数计数器。