0

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

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 长的字符串时,它都会返回错误,但我不知道如何修复它。

我希望我提供了足够的信息来帮助我。如果您需要更多代码或其他内容,请询问!提前致谢!!

4

1 回答 1

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 的操作太短而无法与其他字符串进行比较,我不知道您的其他代码,所以我不能说什么是错的,但这就是您收到错误的原因。如果您有任何问题或通知我我缺少什么,请发表评论。

于 2013-11-06T23:57:26.157 回答