索引超出数组界限 [英] Index Out of Bounds of Array
本文介绍了索引超出数组界限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
对于以下代码,我不断收到消息索引超出数组的范围".另外,我无法获得lblAverage来显示平均值.我刚得到NaN.
代码:
Private Sub btnCount_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCount.Click ''Determine word count and average letters / word in the sentence Dim iLength As Integer ''length of string Dim iWords As Integer ''number of words in sentence Dim iLetterCount As Integer ''count of letters Dim sWord As String ''current word Dim sPrevLetter As String ''previous letter Dim x As Integer ''loop counter Dim sLetter As String ''current letter from sentence Dim sLine As String = txtInput.Text.Trim.ToLower ''entered text - no leading or trailing spaces - make all lowercase sLine = sLine.ToCharArray() Try iLength = sLine.Length + 1 If iLength = 0 Then ''nothing entered MessageBox.Show("Please enter a sentence.") Else End If sWord = "" sPrevLetter = "" For x = 0 To iLength - 1 sLetter = sLine.Chars(x) ''get Next Letter Select Case sLetter Case "a" To "z" ''we are in a word - increment letter counter sWord &= sLetter Case Else ''we are in a break between words If sPrevLetter <> " " Then ''we don''t want to count succesive spaces as a word ''add word to list lstLetters.Items.Add(sWord) iLength = iLength + 1 sWord = "" '' reset for next Word End If End Select sPrevLetter = sLetter If sLetter = "" Then iLength += 1 End If Next If sWord <> "" Then lstLetters.Items.Add(sWord) iLength = iLength + 1 End If Catch ex As Exception MessageBox.Show(ex.Message) End Try lblWordCount.Text = "Words Counted: " & lstLetters.Items.Count lblAverage.Text = "Average letters per Word: " & iLetterCount / iWords End Sub
解决方案
您会得到NAN,因为您被0除-上面发布的代码中从未在任何地方设置iWords.
使用split函数拆分输入.
result = sLine.split(" ")
检查一下:
公共 功能 CalculateAverage( ByVal str As 字符串) As 整数 Dim TotalLetterCount As 整数 = str.Replace (" ," ").长度 同时 str<> str.Replace(" ," ") str = str.Replace(" ," ") 结束 同时 Dim words() As 字符串 = str .Split(" ) Dim 平均 As 整数 = TotalLetterCount/单词.长度 返回平均值 结束 功能
此函数计算平均值.
它还包含单词的总nr(words.length)
而单词变量是单词的列表.
在您的示例中,您没有使用该语言的内置功能.</blockquote>
I keep getting the message "Index is out of bounds of the array," for the following code. Also, I cannot get the lblAverage to display the average. I just get NaN.
Code:
Private Sub btnCount_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCount.Click ''Determine word count and average letters / word in the sentence Dim iLength As Integer ''length of string Dim iWords As Integer ''number of words in sentence Dim iLetterCount As Integer ''count of letters Dim sWord As String ''current word Dim sPrevLetter As String ''previous letter Dim x As Integer ''loop counter Dim sLetter As String ''current letter from sentence Dim sLine As String = txtInput.Text.Trim.ToLower ''entered text - no leading or trailing spaces - make all lowercase sLine = sLine.ToCharArray() Try iLength = sLine.Length + 1 If iLength = 0 Then ''nothing entered MessageBox.Show("Please enter a sentence.") Else End If sWord = "" sPrevLetter = "" For x = 0 To iLength - 1 sLetter = sLine.Chars(x) ''get Next Letter Select Case sLetter Case "a" To "z" ''we are in a word - increment letter counter sWord &= sLetter Case Else ''we are in a break between words If sPrevLetter <> " " Then ''we don''t want to count succesive spaces as a word ''add word to list lstLetters.Items.Add(sWord) iLength = iLength + 1 sWord = "" '' reset for next Word End If End Select sPrevLetter = sLetter If sLetter = "" Then iLength += 1 End If Next If sWord <> "" Then lstLetters.Items.Add(sWord) iLength = iLength + 1 End If Catch ex As Exception MessageBox.Show(ex.Message) End Try lblWordCount.Text = "Words Counted: " & lstLetters.Items.Count lblAverage.Text = "Average letters per Word: " & iLetterCount / iWords End Sub解决方案You get NAN because you are dividing by 0 - iWords is never set anywhere in the code you''ve posted above.
Use the split function to split the input.
result = sLine.split(" ")
Check this out:
Public Function CalculateAverage(ByVal str As String) As Integer Dim TotalLetterCount As Integer = str.Replace(" ", "").Length While str <> str.Replace(" ", " ") str = str.Replace(" ", " ") End While Dim words() As String = str.Split(" ") Dim average As Integer = TotalLetterCount / words.Length Return average End Function
This function calculates the average.
it also contains the total nr of words (words.length)
and the words variable is a list of the words.
In your example you are not utilizing the built in functions of the language.
这篇关于索引超出数组界限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文