所以上下文是,我有一个CS项目,其中输入是以单词或句子形式进行的,然后它被翻译成The Muppets的瑞典厨师所说的。我决定将输入作为一行字符串,并将该行发送到解析器,然后解析器将根据输入字母的翻译构建数组。更改内容的条件在其中定义。我得到的当前错误:(使用“INPUT”作为输入时)
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 1
at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at SwedishTranslator.parseString(SwedishTranslator.java:62)
at SwedishTranslator.main(SwedishTranslator.java:12)
目前它应该只是打印数组,我想担心事后的格式化。 代码:
对不起文字的墙,但我找不到问题的确切位置,我想我会在这里试一试。提前致谢。
答案 0 :(得分:4)
ind<=in.length()
走得太远了。
使用ind < in.length()
或ind <= in.length() - 1
答案 1 :(得分:2)
错误出现在第62行,我认为这是在你的大if if部分。
在那里你有几个ind++
电话。这会增加您在循环中使用的指针。因此,如果您的代码必须经历其中的几个语句,那么它将超出数组索引。
此外,你在for循环中遇到了joval提到的问题
修改强>
++一元运算符递增变量( - 递减)。在变量名称(x ++)之后放置++将在评估之前递增,其中++ x将在评估之后递增。
对于CS学生来说,这是一个常见的测试问题,因此我建议您对操作员进行更多的研究和练习。
答案 2 :(得分:0)
你在这里犯了几个可以理解的初学者错误。我不会明确修改您的代码,而是会告诉您一些在审核和编辑代码时考虑的问题,也会解决您的问题。
当您尝试访问String中的越界项时,String.charAt http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#charAt(int)的文档会引发错误。确保你在检查charAt之前确定你没有试图超越字符串的长度!如果你现在正在考虑&#34;考虑&#34; &#39; T&#39; in&#34; INPUT&#34;而你试着看下两个角色,Java会抱怨。
其次,这更通用(虽然它确实需要在上面的代码中修复); &#39; ++&#39;操作员不会做你认为它实际上做的事情。执行此操作时:in.charAt(ind++)=='H'
,您可能认为您只是检查下一个索引处的值,但您实际上同时推进索引! &#39; ++&#39;操作员非常方便,但它有一个副作用,让很多初学者绊倒:它给自己+ 1分配!这意味着,如果您正在使用“我”。 in&#34; INPUT&#34;在你的循环中的某个地方,你拨打ind++
一次,你就会在P&#39; P&#39; P&#39; P&#39; P&#39;在循环的下一次迭代中!当你看到&#39; ++&#39;请记住,您正在更改变量的值。