Java 如何修复遍历此arraylist的问题?
我使用两个按钮在一个包含12个月的arraylist中来回迭代,当我到达最后一个元素并按下prevButton时,应用程序崩溃,当我返回到第一个元素并点击下一个按钮时也会发生这种情况,我如何修复我的if stationJava 如何修复遍历此arraylist的问题?,java,android,arraylist,Java,Android,Arraylist,我使用两个按钮在一个包含12个月的arraylist中来回迭代,当我到达最后一个元素并按下prevButton时,应用程序崩溃,当我返回到第一个元素并点击下一个按钮时也会发生这种情况,我如何修复我的if station 我已尝试使用>=和执行此操作。在访问最后一个/第一个元素后,通过添加/减去1将I值更改为-1或months.size() 让我们仔细看看这个片段: if (i >= 0) { // let us assume that i = 0, we are getting insid
我已尝试使用>=和执行此操作。在访问最后一个/第一个元素后,通过添加/减去
1
将I
值更改为-1
或months.size()
让我们仔细看看这个片段:
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++;
}
在访问最后一个/第一个元素后,通过添加/减去
1
,最后一次单击将i
值更改为-1
或months.size()
让我们仔细看看这个片段:
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++;
}
当您到达最后一个或第一个索引时,最终值将是它的
-1
或maxsize
,但当您单击相反的按钮返回时,条件仍然是通过,例如,当您已经在-1
时,下一个按钮条件仍然通过,因为-1
小于月。size()
您的情况应该类似于i-1=0,而不是i-1
或maxsize
,但当您单击相反的按钮返回时,条件仍然是通过,例如,当您已经在-1
时,下一个按钮条件仍然通过,因为-1
小于month.size()
您的条件应该是i-1=0而不是ii
之前获得了值-也就是说,i
指向下一个值-按照'm.antkowicz'编写的方法执行,并在获取月份之前递增/递减
-还有一点注意:将月份
添加到空字符串有点奇怪,请使用…setText(month.toString())
主要问题是在更改i
之前获取值-也就是说,i
指向下一个值-按照“m.antkowicz”编写的操作,并在获取月份之前递增/递减-还有一点需要注意的是:将月份
添加到空字符串有点奇怪,请使用…setText(month.toString())
如果i-1==0,那么他只做他自己的逻辑,然后设置i——同样的逻辑仍然适用,他仍然看到第一个月和最后一个月如果i-1==0,那么他只做他自己的逻辑,然后设置i——同样的逻辑仍然适用,他仍然看到第一个月和最后一个月——他会建议总是更新i
,但是作为第一个操作如果在if语句中进行编辑,并更改绑定检查。否则,视图将需要点击两次才能正确更新基本上您是对的,但是问题是OP希望在访问最后/第一个元素后如何处理他的“列表”。如果它重复显示第一/最后一个项目,则不执行任何操作,转到最后/第一个元素,如carousel etca中的贪婪与@Michael——就像索引已经为零(prev按钮),什么也不做;或者已经在末尾(下一步),不执行任何操作;这还意味着,i
始终指向当前实现的实际值,当您第一次单击next/prev时,将不会发生任何事情,假设用于填充文本视图的i
的初始值(因为我们将重新填充i
当前值的数据,然后更新i
).想想看,使用该代码的奇怪行为-例如,i==0
;按next
看一月;按next
看二月;按prev
看三月???无论next
还是prev
我们都会在2月收到通知。我建议总是更新i
会更干净,但随着时间的推移他在if语句中执行第一个操作,并更改绑定检查。否则,视图需要点击两次才能正确更新基本上你是对的,但问题是OP希望在访问最后/第一个元素后如何处理他的“列表”。如果它重复显示第一/最后一个项目,则不执行任何操作,转到如中所示的最后/第一个元素带@Michael的carousel etcagreed-就像索引已经为零(prev按钮),什么也不做;或者已经在末尾(下一步),不执行任何操作;这还意味着,i
始终指向当前实现的实际值,当您第一次单击next/prev时,将不会发生任何事情,假设用于填充文本视图的i
的初始值(因为我们将重新填充i
当前值的数据,然后更新i
).想想看,使用该代码的奇怪行为-例如,i==0
;按next
看一月;按next
看二月;按prev
看三月???不管next
还是prev
我们都会得到二月
if (i >= 0) {
Month month = months.get(i);
monthTextView.setText("" + month);
i = (i > 0) ? (i - 1) : 0; // for example like this
}