Итерация по массиву переменной длины - PullRequest
21 голосов
/ 25 февраля 2010

Как перебрать массив Java переменной длины.

Полагаю, я бы настроил цикл while, но как мне обнаружить, что я достиг конца массива.

Я думаю, я хочу что-то вроде этого [просто нужно выяснить, как представлять myArray.notEndofArray ()]

index = 0;
while(myArray.notEndofArray()){
  system.out.println(myArray(index));
  index++;
}

Ответы [ 4 ]

51 голосов
/ 25 февраля 2010
for(int i = 0; i < array.length; i++)
{
    System.out.println(array[i]);
}

или

for(String value : array)
{
    System.out.println(value);
}

Вторая версия представляет собой цикл «для каждого» и работает с массивами и коллекциями. Большинство циклов может быть сделано с циклом for-each, потому что вы, вероятно, не заботитесь о реальном индексе. Если вам не безразличен фактический индекс, используйте первую версию.

Просто для полноты вы можете выполнить цикл while следующим образом:

int index = 0;

while(index < myArray.length)
{
  final String value;

  value = myArray[index];
  System.out.println(value);
  index++;
}

Но вы должны использовать цикл for вместо цикла while, когда вы знаете размер (и даже с массивом переменной длины вы знаете размер ... он каждый раз просто разный).

5 голосов
/ 25 февраля 2010

Массивы имеют неявную переменную-член, содержащую длину:

for(int i=0; i<myArray.length; i++) {
    System.out.println(myArray[i]);
}

В качестве альтернативы, если используется> = java5, используйте для каждого цикла:

for(Object o : myArray) {
    System.out.println(o);
}
4 голосов
/ 25 февраля 2010

Вы специально упомянули «массив переменной длины» в своем вопросе, поэтому ни один из существующих двух ответов (как я пишу это) не совсем верен.

В Java нет понятия «массив переменной длины», но есть коллекции, которые служат в этом качестве. Любая коллекция (технически любой "Iterable", супертип коллекций) может быть зациклен так просто:

Collection<Thing> things = ...;
for (Thing t : things) {
  System.out.println(t);
}

РЕДАКТИРОВАТЬ: возможно, я неправильно понял, что он имел в виду под "переменной длины". Возможно, он просто имел в виду, что это фиксированная длина, но не каждый экземпляр имеет одинаковую фиксированную длину. В этом случае существующие ответы будут в порядке. Я не уверен, что имелось в виду.

1 голос
/ 08 марта 2018

вот пример, где длина массива изменяется во время выполнения цикла

import java.util.ArrayList;
public class VariableArrayLengthLoop {

public static void main(String[] args) {

    //create new ArrayList
    ArrayList<String> aListFruits = new ArrayList<String>();

    //add objects to ArrayList
    aListFruits.add("Apple");
    aListFruits.add("Banana");
    aListFruits.add("Orange");
    aListFruits.add("Strawberry");

    //iterate ArrayList using for loop
    for(int i = 0; i < aListFruits.size(); i++){

        System.out.println( aListFruits.get(i) + " i = "+i );
         if ( i == 2 ) {
                aListFruits.add("Pineapple");  
                System.out.println( "added now a Fruit to the List "); 
                }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...