2012-01-06 47 views
0

请帮我纠正我的if语句。我正在尝试浏览arraylist元素,但在某些情况下,next和previous按钮会显示命令行错误。错误不同,但它们有以下共同的...Java arraylist导航

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index.... 

继承人的代码

public class buttonListener implements ActionListener { 
    public void actionPerformed(ActionEvent x){ 
     if (x.getSource() == nxtButton){ 
      indexCounter++; 
      balanceFrame.setVisible(false); 
      callDetail(); 

      if(indexCounter == filePaths.size()-1) { //max counter...we dont want to exceed the max number, size of array 
       indexCounter = -1; 
     } 
    } 
    else if (x.getSource() == prevButton){ 
     indexCounter--; 
     balanceFrame.setVisible(false); 
     callDetail(); 
     if(indexCounter == 0){ 
      indexCounter = filePaths.size()-1; 
     } 
    } 
}} 
+1

请发布完整的堆栈跟踪。 – adarshr 2012-01-06 09:19:13

+0

您需要发布callDetail()方法并完成堆栈跟踪。 – Manish 2012-01-06 09:19:32

+0

您不显示使用索引访问列表的代码,并且不显示堆栈跟踪。该消息甚至不完整。阅读堆栈跟踪:它有你需要知道问题发生的所有信息。 – 2012-01-06 09:20:25

回答

2

您获得的例外,因为你是递增/递减计数器,访问ArrayList中,然后,做检查。

你需要做的是增加/减少计数器,进行检查,然后访问ArrayList。

ArrayLists基于0的位置,因此您需要确保尽可能最小的位置为0,并且可能的最大位置比ArrayList中的项目数少一个。

你需要做的是这样的:

indexCounter++; 
if (indexCounter > (filePaths.size - 1)) 
{ 
    indexCounter = filePaths.size - 1; 
} 
callDetail(); 

,并在你的第二个部分

indexCounter--; 
if (indexCounter < 0) 
{ 
    indexCounter = 0; 
} 
callDetail(); 

这将导致用户不断查看的最后一条记录,如果他/她保持按压接下来是第一个记录,如果他/她继续按前一个记录。

在第二个音符,你似乎想实现一个循环链表,所以这应该工作:

indexCounter++; 
if (indexCounter > (filePaths.size - 1)) 
{ 
    indexCounter = 0; 
} 
callDetail(); 

,并在你的第二个部分

indexCounter--; 
if (indexCounter < 0) 
{ 
    indexCounter = filePaths.size - 1; 
} 
callDetail(); 
+0

非常赞赏...问题解决了!是的,我想要一个通告清单。 :) – user1106130 2012-01-06 10:40:36

1

你的问题有点含糊,但我认为问题在这里:

indexCounter = -1; 

我想你真正想要的是:

indexCounter -= 1; // indexCounter = indexCounter - 1 

您的if条件似乎也是错误的。它应该是这样的:

if (indexCounter == filePaths.size()) { 
    indexCounter -= 1; // indexCounter = indexCounter - 1 
} 

甚至更​​好:

if (indexCounter >= filePaths.size()) { 
    indexCounter = filePaths.size() - 1; 
} 

此外,在一个侧面说明,在Java中的约定是使用CamelCase类的名称。所以你的班级应该被命名为ButtonListener而不是buttonListener

+0

你的条件不允许我进一步浏览。所以,让我们说,我在arraylist索引0,点击下一步需要我1,然后再次2(数组的最大大小)。再次点击下一个会在达到最大尺寸时产生错误。它需要回到0。 – user1106130 2012-01-06 10:31:22