Różnica miedzy i++ a i+1 w pętli

0

Witam mam dwa kody, różnią się szczegółem z nazwy tematu wklejam kod

 import java.util.Scanner;

public class HelloWorld {


	  public static void main(String[] args){
	      int[] tablica;
	      Scanner odczyt = new Scanner(System.in);
	 
	      System.out.println("Podaj ilość elementów: ");
	      int liczbaElementow = odczyt.nextInt();
	      tablica = new int[liczbaElementow];
	 
	      for(int i=0; i<tablica.length; i++)
	           tablica[i] = i++;
	 
	          int licznik=0;
	          while(licznik<tablica.length){
	              System.out.print(tablica[licznik]+" ");
	              licznik++;
	          }
	  }
	}

Dostajemy:

 Podaj ilość elementów: 
5
0 0 2 0 4 

Przy kodzie:

 import java.util.Scanner;

public class HelloWorld {


	  public static void main(String[] args){
	      int[] tablica;
	      Scanner odczyt = new Scanner(System.in);
	 
	      System.out.println("Podaj ilość elementów: ");
	      int liczbaElementow = odczyt.nextInt();
	      tablica = new int[liczbaElementow];
	 
	      for(int i=0; i<tablica.length; i++)
	          tablica[i] = i+1;

	          int licznik=0;
	          while(licznik<tablica.length){
	              System.out.print(tablica[licznik]+" ");
	              licznik++;
	          }
	  }
	}

Dostajemy:

 Podaj ilość elementów: 
5
1 2 3 4 5 

Pytanie, skąd się bierze ta różnica?

3

i++ modyfikuje zmienną i, a i + 1 nie.

0

ok, nie mogę jedynie zrozumieć skąd ten wynik: 0 0 2 0 4.
Mógłby ktoś przedstawić jak rozumował program w tym przypadku?
Siedzę nad tym i nie mogę zrozumieć. Przydałaby się pomoc kogoś bardziej doświadczonego

2

Stąd, że:
w for i = 0
tablica[0] = 0 i zwiększ i o 1 -> i = 1
kolejny for, zwiększ i o 1 -> i = 2
tablica[2] = 2 i zwiększ i o 1 -> i = 3
kolejny for, zwiększ i o 1 -> i = 4
tablica[4] = 4 i zwiększ i o 1 -> i = 5
warunek w forze nie jest spełniony.
Wypełniłeś więc tablicę tak, że:
tablica[0] = 0
tablica[2] = 2
tablica[4] = 4

2
for (a; b; c) d;

to to samo co

a; while(b) { d; c; }

Przetłumacz sobie w ten sposób fora na while, a potem się zastanów jak zmienia się zmienna i w kolejnych przebiegach while.

Generalnie for trójelementowy może zawierać cokolwiek w częściach a, b i c. Tzn w części a może być dowolna deklaracja zmiennej, w części b cokolwiek co daje w wyniku wartość logiczną, a w części c dowolne polecenie. Nie ma nawet wymogu, by te części odnosiły się do tych samych zmiennych. Forem tym można np iterować od tyłu, iterować co kilka pozycji, albo nie iterować tylko zrobić fora, który kręci się w kółko (np for (cośtam; true; cośtam) { latam_w_kółko() }).

W twoim przypadku inkrementujesz zmienną i dwukrotnie w jednym przebiegu pętli, co psuje ci zabawę.

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