2010-02-25 15 views
19

Come si esegue l'iterazione su un array Java di lunghezza variabile.Iterazione attraverso un array Java a lunghezza variabile

Immagino che vorrei impostare un ciclo while, ma come potrei rilevare che ho raggiunto la fine dell'array.

immagino che voglio qualcosa di simile [solo bisogno di capire come rappresentare myArray.notEndofArray()]

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

raccomanda di impiegare un ciclo for Poiché si sa quando l'esecuzione finirà – Woot4Moo

risposta

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

o

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

La seconda versione è un " for-each "loop e funziona con array e collezioni. La maggior parte dei cicli può essere eseguita con il ciclo for-each perché probabilmente non ti interessa l'indice effettivo. Se ti interessa il vero indice usci la prima versione.

Solo per completezza si può fare il ciclo while in questo modo:

int index = 0; 

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

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

Ma si dovrebbe usare un ciclo for, invece di un ciclo while quando si conosce la dimensione (e anche con una matrice di lunghezza variabile si sa la dimensione ... è solo diversa ogni volta).

5

array hanno una variabile membro implicita tenendo la lunghezza:

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

In alternativa, se utilizzando> = java5, utilizzare un ciclo For Each:

for(Object o : myArray) { 
    System.out.println(o); 
} 
3

Hai specificamente parlato di una "variabile array di lunghezza "nella tua domanda, quindi nessuna delle due risposte esistenti (mentre scrivo questo) ha perfettamente ragione.

Java non ha alcun concetto di "matrice di lunghezza variabile", ma ha Collezioni, che servono in questa capacità. Ogni collezione (tecnicamente qualsiasi "Iterable", un supertipo di collezioni) può essere avvolto su più semplicemente questo:

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

EDIT: è possibile ho frainteso quello che voleva dire da 'a lunghezza variabile'. Potrebbe aver semplicemente inteso che è una lunghezza fissa, ma non tutte le istanze hanno la stessa lunghezza fissa. Nel qual caso le risposte esistenti andrebbero bene. Non sono sicuro di cosa si intendesse.

0

qui è un esempio, in cui la lunghezza della matrice varia durante l'esecuzione del ciclo

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 "); 
       } 
     } 
    } 
} 
Problemi correlati