索引超出数组界限 [英] Index Out of Bounds of Array

查看:92
本文介绍了索引超出数组界限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于以下代码,我不断收到消息索引超出数组的范围".另外,我无法获得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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆