web-dev-qa-db-fra.com

Itération à travers un tableau de longueur variable

Comment itérer sur un tableau Java de longueur variable.

Je suppose que je configurerais une boucle while, mais comment pourrais-je détecter que j'ai atteint la fin du tableau.

Je suppose que je veux quelque chose comme ça [juste besoin de comprendre comment représenter myArray.notEndofArray ()]

index = 0;
while(myArray.notEndofArray()){
  system.out.println(myArray(index));
  index++;
}
21
Ankur
for(int i = 0; i < array.length; i++)
{
    System.out.println(array[i]);
}

ou

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

La deuxième version est une boucle "pour chaque" et fonctionne avec des tableaux et des collections. La plupart des boucles peuvent être effectuées avec la boucle for-each car vous ne vous souciez probablement pas de l'index réel. Si vous vous souciez de l'index réel, utilisez la première version.

Juste pour être complet, vous pouvez faire la boucle while de cette façon:

int index = 0;

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

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

Mais vous devriez utiliser une boucle for au lieu d'une boucle while lorsque vous connaissez la taille (et même avec un tableau de longueur variable, vous connaissez la taille ... elle est juste différente à chaque fois).

51
TofuBeer

Les tableaux ont une variable membre implicite contenant la longueur:

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

Si vous utilisez> = Java5, utilisez un pour chaque boucle:

for(Object o : myArray) {
    System.out.println(o);
}
5
Edward Q. Bridges

Vous avez spécifiquement mentionné un "tableau de longueur variable" dans votre question, donc aucune des deux réponses existantes (au moment où j'écris ceci) n'est tout à fait juste.

Java n'a pas de concept de "tableau de longueur variable", mais il a des collections, qui servent à ce titre. Toute collection (techniquement tout "Iterable", un super-type de collections) peut être bouclée aussi simplement que ceci:

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

EDIT: il est possible que j'ai mal compris ce qu'il entendait par "longueur variable". Il aurait peut-être simplement voulu dire que c'est une longueur fixe, mais toutes les instances ne sont pas de la même longueur fixe. Dans ce cas, les réponses existantes seraient correctes. Je ne sais pas ce que cela voulait dire.

4
Kevin Bourrillion

voici un exemple, où la longueur du tableau est modifiée lors de l'exécution de la boucle

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 "); 
                }
        }
    }
}
1
cjonas