如何通过此arraylist修复迭代?

时间:2019-08-11 19:37:10

标签: java android arraylist

我正在使用两个按钮在包含12个月的数组列表中来回循环,当我到达最后一个元素并按下prevButton时,应用崩溃了,当我回到第一个元素并点击nextButton,如何修正我的if陈述?

我尝试用> =和<=来做到这一点,但是没有用

nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (i < months.size()) {
                    Month month = months.get(i);
                    monthTextView.setText("" + month);
                    i++;
                }
            }
        });


        prevButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (i >= 0) {
                    Month month = months.get(i);
                    monthTextView.setText("" + month);
                    i--;
                }
            }

        });

2 个答案:

答案 0 :(得分:1)

通过最后一次点击,您可以在访问最后一个/第一个元素之后通过添加/减去i-1的值更改为months.size()1

让我们仔细看一下这个片段:

if (i >= 0) { // let us assume that i = 0, we are getting inside
    Month month = months.get(i); // you are assigning first element of months, everything is fine
    monthTextView.setText("" + month); // some data operation - irrelevant
    i--; // anyway you are updating i to [i = -1]
}

// one "next" click later...

if (i < months.size()) { // condition is fine because i = -1
    Month month = months.get(i); // oooops tried to access months[-1] - ERROR
    monthTextView.setText("" + month);
    i++;
}

第二种情况也是如此

您应该执行的操作-仅当当前值为强i> 0时,才应更新< month.size() - 1

if (i >= 0) {
    Month month = months.get(i);
    monthTextView.setText("" + month);
    i = (i > 0) ? (i - 1) : 0; // for example like this
}

答案 1 :(得分:1)

当您到达最后一个索引或第一个索引时,最终值将是其中的-1maxsize,但是当您单击向后的相反按钮时,条件仍会通过,例如您已经在{ {1}}下一个按钮条件仍然通过,因为-1小于-1,您的条件应该类似于i-1 <= 0然后设置i

编辑:我认为发布此内容的人表示,当(i == months.size()-1)时 并且您说了下一个按钮,那么它现在可以正常工作,因为它得到了上个月,但随后我又增加了一个,即i == months.size()现在为true。然后,当您按下prevButton时,仅检查i> = 0而不是i