Pętla for - nie rozumiem jej działania w zadanym kodzie

2017-03-01 17:03
Nieposkromiony Wąż
0

Dopiero zaczynam, ale nie rozumiem dlaczego
1:

public class Petla
{
   public static void main(String[] args)
   {

     for (int i = 0; i < 4; i++)
      {
         System.out.print(i);
      }
   }
} 
  1. inicjalizacja i = 0
  2. sprawdzam warunek i<4
  3. wyświetlam wynik
  4. dodaję 1 do i (i++)
    Wynik: 0123

Nie rozumiem dlaczego wynik jest taki sam, kiedy zamienimy inkrementacje przyrostkową na przedrostkową. Według mnie powinno być:

  1. inicjalizacja i = 0
  2. sprawdzam warunek i<4
  3. dodaję 1 do i (i++)
  4. wyświetlam wynik
    Wynik: 123
    Proszę o pomoc.
edytowany 2x, ostatnio: furious programming, 2017-03-01 19:11
2017-03-01 17:04
Nieposkromiony Wąż
0

w inkrementacji przedrostkowej powinno być ++i oczywiście

Pozostało 580 znaków

2017-03-01 17:10
1

A jaka jest niby wg ciebie różnica? o_O Przecież operacja pętli wykonuje się ZA ciałem pętli i pre/post-inkrementacja nie ma tu nic do rzeczy w ogóle. ZAWSZE będziesz miał:

  1. Inicjalizacja
  2. Warunek końca, jeśli nie spełniony to goto 6
  3. Ciało pętli
  4. Step
  5. goto 2
  6. Koniec

A różnica post/pre-inkrementacji jest tylko w obrębie tej jednej instrukcji, tzn tylko jeśli wynik operacji gdzieś przypisujesz. Jesli wyniku nie przypisujesz (jak w pętli) to różnicy "semantycznej" nie ma.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2017-03-01 17:11

Pozostało 580 znaków

2017-03-01 18:10
Nieposkromiony Wąż
0

Dzięki! Wszystko mi rozjaśniłeś :) Mam jeszcze 2 pytania odnośnie tego przykładu. Na teście miałem:

String s = s1 = "0";
for (int i = 0; i < 5; i++)
{
s = s + i;
}
System.out.println(s);

1.String s = s1 = "0";//przypisujemy łańcuch "0" do s1, potem do s - wiadomo. Napisałem na teście, że program się nie skompiluje, bo nie ma deklaracji s1....... Poza tym wrzuciłem to do kompilatora i też wyskakuje błąd. Czy ja czegoś nie rozumiem???
Poprawny wynik to 001234 o ile się nie mylę.

  1. s = s + i;// "i" jest konwertowane do Stringa w tym miejscu podczas łączenia: s = s + i czy w tym podczas przypisania s = s + i;?? Czy za bardzo drążę?
    Nie zakładam osobnego wątku, bo chyba nie warto.

Pozostało 580 znaków

2017-03-01 19:45
0

W miejscu łączenia następuje konwersja. Nawet jeśli tego nigdzie nie przypiszesz to string+int się dodadzą.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0