RangeError:错误#2006:提供的索引超出范围AS3

时间:2013-11-06 23:05:34

标签: actionscript-3 runtime-error

我喜欢使用这个网站获取有关代码的小技巧,我尝试自己解决所有错误。然而,这个让我难以忍受了好几天。我只是无法破解它。

RangeError:错误#2006:提供的索引超出范围。     在flash.text :: TextField / setTextFormat()     在BibleProgram_fla :: MainTimeline / checkAgainstBible()     在BibleProgram_fla :: MainTimeline / compileInputString()     在BibleProgram_fla :: MainTimeline / spaceBuild()

function spaceBuild(event:Event):void //This program runs every frame
{
    compileInputString();
}

function compileInputString():void
{
    inputVerse = inputText.text; // takes text from the input field

    inputVerse = inputVerse.toLowerCase();
    inputVerse = inputVerse.replace(rexWhiteSpace, "");  //Removes spaces and line breaks
    inputVerse = inputVerse.replace(rexPunc, ""); // Removes punctuation

    inputVerse = addSpaces(inputVerse); //adds spaces back in to match the BibleVerse
    inputVerse = addCaps(inputVerse); //adds capitalization to match the BibleVerse
    checkAgainstBible();
}

function checkAgainstBible()
{
    outputText.text = inputVerse; // sets output text to be formatted to show which letters are wrong

    for(var n:Number = 0; n < inputText.length; n++)
    {
        var specLetter:String = inputVerse.charAt(n);

        if(specLetter != bibleVerse.charAt(n))
        {
            outputText.setTextFormat(red, n); // sets all of the wrong letters to red
        }

    }
}

每当我运行程序并输入一个比BibleVerse更长的字符串时,它会返回错误,但我无法弄清楚如何修复它。

我希望我能为您提供足够的信息来帮助我。如果您需要更多代码或其他内容,请询问! 在此先感谢!!

1 个答案:

答案 0 :(得分:1)

好吧,当你的格式颜色设置为红色时,如果n大于outputText中的字符数,你就会得到那个错误,当你把它的输入变成等于你的inputVerse时,看起来你的outputText的字符被扩展或缩短了因为inputVerse具有我无法看到的所有正则表达式操作。所以很可能这些操作正在缩短字符,因此outputText.text比它应该更短,当它遍历inputText.length时,当它到达outputText的末尾时,n超过它的字符长度,所以你得到那个错误(这就是错误 - 你试图访问那些不存在的东西)。所以我看到它的方式是(使用示例组成的字符串);

// Pseudo code...
inputVerse=inputText.text; // (lets say its "Thee ")
// inputVerse and inputText.text now both have 5 characters
inputVerse=lotsOfOperations(inputVerse);
// inputVerse now only has 4 characters (got rid of the " " at the end)
outputText.text=inputVerse;
// outputText.text now has the new 4 character
for(var n:Number = 0; n < inputText.length; n++)
// loops through inputText.length (so it loops 5 times)
outputText.setTextFormat(red, n);
// if n=4 (since n starts at 0) from the inputText.length, then when it access
//outputText.setTextFormat(red,n) it is accessing a character of outputText.text
//that is at the end and not there. outputText.text is too short for the loop.

所以,你的问题是你对inputVerse的操作太短,无法与其他字符串进行比较,我不知道你的其他代码,所以我不能说什么错,但这就是为什么你得到的错误。如果您有任何问题,请发表评论或通知我我缺少的内容。