2016-02-04 46 views
6

miałem ostatnio dyskusję na temat wykorzystania non-counter warunków w pętli for-związanej w Java:dla pętli stan konwencje

for(int i = 0; o.getC() < 10; i++) 
    o.addC(i); 

Czy ktoś wie, czy są jakieś „oficjalne” konwencje dla ciałami takie warunki? Moim zdaniem jest to łatwiejsze do odczytania w porównaniu do odpowiednika podczas pętli, ponieważ wszystkie loop-parametry są ze sobą w pierwszej linii:

int i = 0; 
while(o.getC() < 10) { 
    i++; 
    o.addC(i); 
} 

lub nawet gorzej:

int i = 0; 
while(o.getC() < 10) 
    o.addC(++i); 
+1

Co masz na myśli, mówiąc o warunkach niezwiązanych z rachunkiem? To jest zdecydowanie sprzeczne. –

+1

Pętla for jest korzystnie (IMO), ponieważ 1) "i" ma zasięg do pętli; 2) jesteś zmuszony pamiętać, aby inkrementować (lub jawnie nie zwiększać) 'i' w każdej iteracji. Druga i trzecia opcja nie zapewniają żadnej szczególnej korzyści i są mniej czytelne (szczególnie 'o.addC (++ i);'). –

+0

Możliwy duplikat [kiedy używać pętli zamiast pętli] (http://stackoverflow.com/questions/6710601/when-to-use-while-loop-rather-than-for-loop) –

Odpowiedz

1

for Pętle są używane praktycznie we wszystkich sytuacjach w porównaniu z równoważnym rozwiązaniem while. Tablice, listy, standardowe struktury danych.

Z drugiej strony while jest powszechnie stosowany ze strumieniami i nieskończenie długich powtórzeń ..

0

Miła rzeczą dla pętli czy istnieje metoda skrótu. Jeśli chcesz zrobić wszystkie elementy w tablicy, możesz po prostu wykonać następujące czynności:

(podwójna liczba: arrayName) gdzie double jest typem, number to nazwa, którą nadajesz każdemu elementowi (doesn ' Nieważne, jak to nazwiesz, w tym przypadku będziesz odnosił się do każdej wartości jako "liczba". And arrayName jest nazwą tablicy, do której się odnosisz.

Jeśli chcesz dotrzeć do każdego elementu/obiektu, jest to najszybszy sposób.

+0

Nazywa się to ulepszoną pętlą for. (Nazywam to pętlą foreach). W rzeczywistości nie jest "najszybsza" pod względem szybkości, ponieważ pod maską musi wykonywać konwersje typu i nadal używa zwykłej pętli for. –

+0

Ahh przepraszam, sam jestem nowym programistą. Próbowałem pomóc, ale mogłem: p –

0

Jak o:

for(int i = 0; i < MAX_ITERATIONS; i++) 
{ 
    o.addC(i); 
    if (o.getC() >= 10) 
     return o; // or break 
} 

Zapobiega to nieskończoną pętlę jeśli ADDC nie jest tak naprawdę robi to, czego oczekują.

1

Większość programiści będą oczekiwać for sprawozdanie składa się z trzech rzeczy:

  • inicjalizacji zmiennej
  • Warunki zakończenia oparte na zmiennej
  • Przyrost na zmiennej

Jeśli zmienisz kod, aby zawierał nieoczekiwane rzeczy, będzie trudniej go odczytać, a tym samym trudniej go utrzymać.

Ponadto, myślę, że pętla while czyni swoją wolę jaśniejszy: coś zrobić podczas o.getC() jest mniejsza niż 10. To "coś" dzieje się: dodać liczbę zwiększającą.

Krótka historia: użyj pętli while dla "warunków niezwiązanych z licznikami".