Как определить, является ли элемент последним элементом в массиве? - PullRequest
0 голосов
/ 05 ноября 2018

Код ниже разбивает строку на основе ее позиции и затем помещает ее в ArrayList.

Так, например, если String равен "Who Framed Roger Rabbit?", то fragmentMessage будет разбивать сообщение на каждый 8-й символ.

Итак, ArrayList будет выглядеть так: [Who Fram, ed Roger, Rabbit?]

Элементы ArrayList следующие:

  1. Элемент ArrayList 0: Who Fram
  2. ArrayList Элемент 1: ed Roger
  3. Элемент ArrayList 2: Rabbit?

У меня тогда есть цикл for-each в основном методе, который перебирает ArrayList.

Как я могу определить, достиг ли я последнего элемента массива при итерации?

Например, «, если это последний элемент массива, выведите« LAST ELEMENT ».

import java.util.ArrayList;
import java.util.List;

public class LastElement {

public static void main(String[] args) {

    String message = "Who Framed Roger Rabbit?";
    for (String fragment : fragmentMessage(message)) {
        /*
         * If "fragment" is the last element of the array, then do something
         */
    }
}

private static List<String> fragmentMessage(String message) {
    List<String> fragmentedMessage = new ArrayList<>();

    for (int i = 0; i < message.length(); i = i + 8) {
        fragmentedMessage.add(message.substring(i, i + 8));
        System.out.println(fragmentedMessage);
    }

    return fragmentedMessage;
}
}

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

У вас есть несколько вариантов.

Использовать итератор:

    String message = "Who Framed Roger Rabbit?";
    List<String> fragments = fragmentMessage(message);

    Iterator<String> iterator = fragments.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());

        if (!iterator.hasNext()) {
            System.out.println("All done!");
        }
    }

Проверьте индекс внутри / для каждого цикла:

    for (String str :
            fragments) {

        System.out.println(str);

        // If this item is the last in the list
        if (fragments.indexOf(str) == fragments.size() - 1) {
            System.out.println("All done!");
        }
    }

При использовании этого метода, если вы используете строки в своем списке, просто имейте в виду, что при наличии дубликатов это будет не очень точно.

Отслеживание индекса со стандартным для цикла:

    for (int i = 0; i < fragments.size(); i++) {
        System.out.println(fragments.get(i));

        if (i == fragments.size() - 1) {
            System.out.println("All done!");
        }
    }
0 голосов
/ 05 ноября 2018

Мое окончательное решение выглядит следующим образом. Он основан на ответе @ k5_ , и ему / ей / другому предоставляется кредит.

Я использовал оператор if-else для только для последнего элемента.

    List<String> fragmentMessage = fragmentMessage(message);
    for (int i = 0; i < fragmentMessage.size(); i++) {
        String fragment = fragmentMessage.get(i);
        if (message.isEmpty()) { // Only if message == "".
            System.out.println(createFrame(message));
        } else if (i == fragmentMessage.size() - 1) { // Last element of the array.
            System.out.println(createLastFrame(fragment));
        } else {
            System.out.println(createFrame(fragment)); // Only if message is not the last message.
        }
    }
0 голосов
/ 05 ноября 2018

Не существует прямого способа узнать, есть ли у вас последняя запись List в цикле foreach.

Проще всего было бы использовать индексированный цикл.

Нечто подобное:

    List<String> fragmentMessage = fragmentMessage(message);
    for (int i = 0; i < fragmentMessage.size(); i++) {
        String fragment = fragmentMessage.get(i);
        /*
         * If "fragment" is the last element of the array, then do something
         */
        if (i == fragmentMessage.size()-1) {

        }
    }

Другой вариант будет Iterator

    for (Iterator<String> iterator = fragmentMessage(message).iterator();
        iterator.hasNext();) {
        String fragment = iterator.next();
        if (!iterator.hasNext()) {

        }
    }
...