Итерация по массиву строк в Java - PullRequest
62 голосов
/ 15 июля 2011

У меня есть массив строк с некоторыми компонентами, этот массив состоит из 5 компонентов, и он меняется несколько раз.Что я хотел бы сделать, так это перебрать этот массив и получить первый компонент и компонент рядом с ним.Поэтому в первый раз я получу номер компонента 1 и номер компонента 2, второй раз получу номера 2 и 3, третий раз - номера 3 и 4 ... И так до тех пор, пока вы не доберетесь до последнего компонента.

Вот как далеко я зашёл:

String[] elements = { "a", "a","a","a" };

for( int i = 0; i <= elements.length - 1; i++)
{
    // get element number 0 and 1 and put it in a variable, 
    // and the next time get element      1 and 2 and put this in another variable. 
}

Как мне это сделать?

Ответы [ 9 ]

153 голосов
/ 11 сентября 2013

Вы можете сделать расширенный цикл (для Java 5 и выше) для итерации элементов массива:

String[] elements = {"a", "a", "a", "a"};   
for (String s: elements) {           
    //Do your stuff here
    System.out.println(s); 
}
34 голосов
/ 15 июля 2011
String[] elements = { "a", "a", "a", "a" };

for( int i = 0; i < elements.length - 1; i++)
{
    String element = elements[i];
    String nextElement = elements[i+1];
}

Обратите внимание, что в этом случае elements.length равно 4, поэтому вы хотите перейти от [0,2] для получения элементов 0,1, 1,2 и 2,3.

5 голосов
/ 15 июля 2011
String current = elements[i];
if (i != elements.length - 1) {
   String next = elements[i+1];
}

Это гарантирует, что вы не получите ArrayIndexOutOfBoundsException для последнего элемента (там нет 'next').Другим вариантом является повторение до i < elements.length - 1.Это зависит от ваших требований.

3 голосов
/ 15 июля 2011
String[] elements = { "a", "a","a","a" };

for( int i=0; i<elements.length-1; i++)
{
    String s1 = elements[i];
    String s2 = elements[i+1];
}
2 голосов
/ 15 июля 2011

Я бы поспорил вместо тестирования i меньше чем elements.length - 1 тестирование i + 1 меньше чем elements.length. Вы не меняете домен просматриваемого массива (т.е. игнорируете последний элемент), а скорее изменяете самый лучший элемент, который вы просматриваете в каждой итерации.

String[] elements = { "a", "a","a","a" };

for(int i = 0; i + 1 < elements.length; i++) {
    String first = elements[i];
    String second = elements[i+1];
    //do something with the two strings
}
1 голос
/ 15 июля 2011

Вы должны поддерживать серийный номер, сколько раз вы обращаетесь к массиву. Используйте вот так

int lookUpTime=0;

    for(int i=lookUpTime;i<lookUpTime+2 && i<elements.length();i++)
     {
    // do something with elements[i]
    }

lookUpTime++;
0 голосов
/ 16 апреля 2019

Если вы ищете производительность и порядок итераций не имеет значения, вы можете выполнять итерацию с использованием оптимизированного обратного цикла:

for(int i=elements.lenth; --i>=0;) {...}

Таким образом, вы один раз получаете длину массивазатем уменьшение индекса и сравнение с нулем в одной атомарной операции.Последнее, но не последнее сравнение с нулем - это очень быстрая операция, часто используемая многими процессорами (быстрее, чем сравнение с длиной массива).

0 голосов
/ 16 марта 2018
    String[] nameArray= {"John", "Paul", "Ringo", "George"};
    int numberOfItems = nameArray.length;
    for (int i=0; i<numberOfItems; i++)
    {
        String name = nameArray[i];
        System.out.println("Hello " + name);
    }
0 голосов
/ 09 февраля 2017

Эти алгоритмы неверны из-за сравнения:

для (int i = 0; i

или

для (int i = 0; i + 1

Это правда, что элементы массива варьируются от 0 до length - 1, но сравнение в этом случае должно быть less than or equal to.Это должно быть:

для (int i = 0; i

или

для (int i = 0; i <= elements.length - 1; i ++) {</p>

или

для (int i = 0; i + 1 <= элементов.length; i ++) {</p>

Массив ["a", "b"] будет повторяться как:

i = 0 равно <2: elements [0] возвращает "a" </p>

i = 1 равно <2: elements [1] выдает «b» </p>

, затем выходит из цикла, потому что 2 не равно <2. </p>

Неправильные примеры оба выхода изцикл преждевременно и выполняется только с первым элементом в этом простом случае из двух элементов.

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