为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复遍历此数组列表?

如何修复遍历此数组列表?

蛊毒传说 2023-06-04 15:19:21
我使用两个按钮在包含 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 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

最后一次单击您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

}


查看完整回答
反对 回复 2023-06-04
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

当你到达最后一个或第一个索引时,最终值将是它的-1maxsize,但是当你点击相反的按钮时,条件仍然通过,例如当你已经在下-1一个按钮条件仍然通过时-1< 比month.size()你的条件应该是类似于 if i-1 <= 0 然后设置 i

编辑:我认为发布这个的人意味着当 ( i == months.size() - 1 ) 和你说下一个按钮时,它工作正常,因为它是最后一个月但然后我增加了一个,那就是, i == months.size() 现在是真的。然后,当您按下 prevButton 时,仅检查 i >= 0 而不是 i < months.size()。因此,数组索引现在越界了。您应该检查两种按钮方法中的索引范围。


查看完整回答
反对 回复 2023-06-04
  • 2 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信