Чтение последних частей Arraylist: Java - PullRequest
0 голосов
/ 23 марта 2012

Я пытаюсь прочитать последние 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));
    }

Может ли кто-нибудь мне помочь?Спасибо.

Ответы [ 8 ]

1 голос
/ 23 марта 2012

Использование 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);
1 голос
/ 23 марта 2012

Попробуйте этот цикл:

 for(int j2 = chatList.size() - 8; j2 < chatList.size(); j2++)
0 голосов
/ 23 марта 2012

Попробуйте следующий цикл:

int size = charList.size() > 7 ? charList.size() - 8 : 0;
for(int j2 = size; j2< charList.size();j2++)
0 голосов
/ 23 марта 2012
    List l1 = new ArrayList();       
    int size=l1.size();
    int i;
    for(i=size-8;i<size;i++)
    {
        System.out.println(l1.get(i));
    }
    }

Я думаю, что это простой способ сделать это.

0 голосов
/ 23 марта 2012

Ваше условие j2 проверит, меньше ли j2, чем размер списка и 8, означает, что цикл будет повторяться от index 0 до 7 , он не будет читать последние 8 элементов, вместо этого он читает первые 8 элементов.

Вместо этого вы можете указать свое состояние как

j2<chatList.size() && j2>=chatList.size()-8
0 голосов
/ 23 марта 2012
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
     } 


}
0 голосов
/ 23 марта 2012
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

0 голосов
/ 23 марта 2012

Вместо того, чтобы читать последние 8 частей вашего ArrayList, ваш цикл for читает first 8.

Что вы вместо этого хотите сделать, это начать с size-8-й элемент и затем цикл до последнего элемента, поэтому ваш код должен выглядеть примерно так:

int size = chatList.size();
int start = (size > 8) ? size - 8 : 0;

for(int j2 = start; j2 < size; j2++) {
   ...
}

РЕДАКТИРОВАТЬ: Забыл о случае, когда size может быть меньше 8. Еслиэто так, то вы должны начать с элемента 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...