我喜欢使用这个网站获取有关代码的小技巧,我尝试自己解决所有错误。然而,这个让我难以忍受了好几天。我只是无法破解它。
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更长的字符串时,它会返回错误,但我无法弄清楚如何修复它。
我希望我能为您提供足够的信息来帮助我。如果您需要更多代码或其他内容,请询问! 在此先感谢!!
答案 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的操作太短,无法与其他字符串进行比较,我不知道你的其他代码,所以我不能说什么错,但这就是为什么你得到的错误。如果您有任何问题,请发表评论或通知我我缺少的内容。