这是我的代码:
import java.util.ArrayList;
public class PostmanProblem {
public static void main(String[] args) {
//Make the ArrayList and fill it
ArrayList<Door> al = new ArrayList<Door>();
for(int i = 0; i<=9; i++){
al.add(new Door("closed", i));
}
//Do the problem
for (int i = 1; i < 100; i++){
for (int n = i; n < 100; n+=i){
if (al.get(n).isClosed()){
al.get(n).open();
}
else
{
al.get(n).close();
}
}
}
for(Door d : al){
System.out.print(d.toString() + "\t");
}
}
}
我不知道为什么,但我得到以下例外:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 10
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at PostmanProblem.main(PostmanProblem.java:15)
它引用的行是嵌套for循环中if语句的开头。 Door类具有返回布尔值的isClosed()方法,以及返回布尔值的isOpen()方法。它具有void函数open()和close(),它将其状态更改为打开或关闭。 Door的构造函数是Door(String state,int id)。希望这就是你所需要的一切。提前谢谢!
答案 0 :(得分:1)
这就是事情:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 10
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at PostmanProblem.main(PostmanProblem.java:15)
这为您提供了大量的信息。
PostmanProblem.java
的第15行。那里发生了什么?java.util.ArrayList.get
,您在.get
上调用的ArrayList
方法存在问题。java.lang.IndexOutOfBoundsException: Index: 10, Size: 10
这是一个很多信息,它使问题难以解决。
首先,转到发生错误的行。查看您尝试访问的索引。根据程序实际应该做什么,您是否正在访问正确的索引?或者你在这里犯了一个逻辑错误?您是否应该能够访问此数组的索引以获取该程序的预期功能?
如果不应该访问此索引,那么您的错误就在这里。您需要修复控制正在访问的索引的逻辑。但是,如果这是一个应该能够访问的索引,那么问题是你没有使ArrayList
足够大。因此,现在您需要转到已设置ArrayList
的代码部分,并找出您在此处所做的逻辑错误以及为什么ArrayList
没有那么大你想要它。
for(int i = 0; i<=9; i++){
al.add(new Door("closed", i));
}
这是您将值加载到al
的位置。您输入了十个值。它们位于索引0
到9
。
for (int i = 1; i <= 100; i++){
for (int n = i; n <= 100; n+=i){
if (al.get(n).isClosed()){
al.get(n).open();
} else {
al.get(n).close();
}
}
}
这是你走出界限的地方。你试图进入指数10(以及超越),但你的最大指数是9。
答案 1 :(得分:0)
看起来你只需要在ArrayList al中添加10个项目,并期望找到100 ??
ArrayList<Door> al = new ArrayList<Door>();
for(int i = 0; i<=9; i++){
al.add(new Door("closed", i));
}
然而
for (int n = i; n <= 100; n+=i){
if (al.get(n).isClosed()){
al.get(n).open();
}
暗示n将是&gt; 9在某个阶段
答案 2 :(得分:0)
您的ArrayList al的大小为10(从索引0到9),但您尝试访问1到100。 所以当循环在n == 10时,它超出界限。