请帮我纠正我的if语句。我试图浏览arraylist元素,但在某些情况下,next和previous按钮显示命令行错误。错误各不相同,但它们有以下共同点......
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;
}
}
}}
答案 0 :(得分: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();
答案 1 :(得分: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
。