我正在尝试阅读arraylist的最后8个部分。但我遇到了一些麻烦。到目前为止,这是我的代码:
for(int j2 = 0; j2 < chatList.size() && j2 < 8; j2++)
{
if(chatEnabled) GameMain.CourierFont(this,""+chatList.get(j2), cWindowX + 4, cWindowY - (16 + -j2 * 10));
}
有人可以帮帮我吗? 感谢。
答案 0 :(得分:1)
试试这个循环:
for(int j2 = chatList.size() - 8; j2 < chatList.size(); j2++)
答案 1 :(得分:1)
使用subList()
可能很方便:
List<Chat> chatList = new ArrayList<Chat>();
// initialize
int last = chatList.size();
int first = last - Math.min(8, chatList.size());
List<Chat> recent = chatList.subList(first, last);
答案 2 :(得分:0)
而不是阅读ArrayList
的最后8部分,而您的for
循环首先读取 8。
你想要做的是从size-8th元素开始然后循环直到最后一个元素,因此你的代码看起来像:
int size = chatList.size();
int start = (size > 8) ? size - 8 : 0;
for(int j2 = start; j2 < size; j2++) {
...
}
编辑:忘记size
可能小于8的情况。如果是这种情况,那么您应该从元素0开始。
答案 3 :(得分:0)
int j2 = chatList.size() - 8;
while(j2 < chatList.size() && (chatList.size() - 8) >= 0) {
if(chatEnabled) GameMain.CourierFont(this,""+chatList.get(j2), cWindowX + 4, cWindowY - (16 + -j2 * 10));
}
我认为你应该检查你的chatList的大小是否超过8
答案 4 :(得分:0)
int chatListSize = chatList.size();
// if you do not do this check,the code will fail miserably.
if ( chatListSize > 8) {
for(int i = chatListSize - 8; i < chatListSize; i++) {
//TO-DO
}
}
答案 5 :(得分:0)
您的病情 j2&lt; chatList.size()&amp;&amp; j2&lt; 8 将检查j2是否小于列表大小和8,表示循环将从索引0迭代到7 ,它不会读取最后8个元素而是读取前8个元素。
相反,您可以将您的条件视为
j2<chatList.size() && j2>=chatList.size()-8
答案 6 :(得分:0)
List l1 = new ArrayList();
int size=l1.size();
int i;
for(i=size-8;i<size;i++)
{
System.out.println(l1.get(i));
}
}
我认为这是一种简单的方法。
答案 7 :(得分:0)
尝试以下循环:
int size = charList.size() > 7 ? charList.size() - 8 : 0;
for(int j2 = size; j2< charList.size();j2++)