我正在使用两个按钮在包含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--;
}
}
});
答案 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)
当您到达最后一个索引或第一个索引时,最终值将是其中的-1
或maxsize
,但是当您单击向后的相反按钮时,条件仍会通过,例如您已经在{ {1}}下一个按钮条件仍然通过,因为-1
小于-1
,您的条件应该类似于i-1 <= 0然后设置i
编辑:我认为发布此内容的人表示,当(i == months.size()-1)时
并且您说了下一个按钮,那么它现在可以正常工作,因为它得到了上个月,但随后我又增加了一个,即i == months.size()现在为true。然后,当您按下prevButton时,仅检查i> = 0而不是i