2011-07-15 3 views
54

Mam tablicę String z niektórymi komponentami, ta tablica ma 5 komponentów i zmienia się kilka razy. Chciałbym wykonać iterację w tej tablicy i uzyskać pierwszy komponent i komponent obok tego. Tak więc po raz pierwszy otrzymam komponent numer jeden i numer komponentu 2, drugi raz otrzymam numer 2 i 3, trzeci numer 3 i 4 ... I tak dalej, aż dojdziesz do ostatniego komponentu.Iteracja poprzez tablicę ciągów w Javie

To jak daleko doszedłem:

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. 
} 

W jaki sposób można to osiągnąć?

Odpowiedz

3
String current = elements[i]; 
if (i != elements.length - 1) { 
    String next = elements[i+1]; 
} 

To sprawia, że ​​na pewno nie dostać ArrayIndexOutOfBoundsException do ostatniego elementu (nie ma „obok” tam). Inną opcją jest iteracja do i < elements.length - 1. To zależy od twoich wymagań.

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

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

Należy zauważyć, że w tym przypadku, elements.length jest 4, więc chcesz iteracyjne od [0,2] dostać elementy 0,1, 1,2 i 2,3.

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

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

Trzeba utrzymać seryjny ile razy uzyskiwania dostępu do array.Use jak ten

int lookUpTime=0; 

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

lookUpTime++; 
1

Uważam zamiast badań i mniej niż elements.length - 1 testowania i + 1 mniej niż elements.length. Nie zmieniasz domeny tablicy, na którą patrzysz (tj. Ignorujesz ostatni element), ale zmieniasz największy element, na który patrzysz w każdej iteracji.

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 
} 
125

Wystarczy dodać do odpowiedzi powyżej lub poniżej, które można zrobić Enhanced For-Loop (dla Java 5 i wyższe) dla iteracji na elementy tablicy za:

String[] elements = { "a","a","a","a" }; 
for (String s: elements) {   
     //Do your stuff here 
     System.out.println(s); 
    } 
+1

Jak uzyskać numer iteracji w tym? Czy muszę to zrobić ręcznie, deklarując zmienną i licząc iteracje? – User3

+1

Myślę, że należy dodać dodatkową zmienną do przechowywania tych informacji. – Michal

+1

Należy również pamiętać, że ta zaawansowana pętla for odnosi się do wersji Java 1.5 i nowszych. Wiem, że 1.4 i poniżej są starożytne, ale większość ludzi próbuje tego i otrzymuje błędy, aw niektórych przypadkach nie sprawdzaliby, której wersji java używają. – Arty

0

algorytmy te są zarówno niewłaściwe ze względu na Porównanie:

do (int i = 0; i < elements.length - 1; i ++)

lub

do (int i = 0; i + 1 < elements.length; i ++) {

To prawda, że ​​elementy tablicy wahają się od 0 do length - 1, ale porównanie w tym przypadku powinna być less than or equal to. Powinny to być:

dla elementów (int i = 0; i <.długość; i ++) {

lub

do (int i = 0; i < = elements.length - 1; i ++) {

lub

do (int i = 0; i + 1 < = elements.length; i ++) {

Tablica ["a", "b"] że iteracyjne jako:

I = 0 < 2: Elementy [0], otrzymuje się "a"

i = 1 < 2: Elementy [1] Plony „B "

następnie opuścić pętle ponieważ 2 jest < 2.

Te nieprawidłowe przykłady zarówno wyjście pętli przedwcześnie i wykonuj tylko z pierwszym elementem w tym prostym przypadku dwóch elementów.