inkrementacja oraz dekrementacja

0

witam
o to krótki kod

public class test {
	  public static void main(String[] args){
		  double a = 5;
		  double b = 3;
		  double c = 9;
		  System.out.println("a="+a+"\n"+"b="+b+"\n"+"c="+c);
		  a = (a++)+(b++)-c;
		  System.out.println("a="+a+"\n"+"b="+b+"\n"+"c="+c);
		  
	  }
	  
	  
}

wynik jest

a=5.0
b=3.0
c=9.0
a=-1.0
b=4.0
c=9.0

Zastanawia mnie to że po inkrementacji a++ wynik zmiennej a nie równa się 0. tylko -1.
w przypatku b++ zadziałało. Czy to oznacza że nie można użyć inkrementacji działając na zmiennej a?

2
cybershaman napisał(a):

Zastanawia mnie to że po inkrementacji a++ wynik zmiennej a nie równa się 0. tylko -1.
w przypatku b++ zadziałało. Czy to oznacza że nie można użyć inkrementacji działając na zmiennej a?

Tak, dokładnie, w implementacji javy jest sprawdzenie czy zmienna się nazywa a i jeśli tak, to inkrementacja nie działa...

A tak serio, to wszystko działa tak jak powinno, w ogóle dlaczego spodziewałeś się 0 a nie -1? Totalna abstrakcja. Patrz, ta linijka gdzie robisz inkrementacje, działa tak, krok po kroku:

  1. Java bierze dla ciebie do pamięci obecną wartość a (czyli 5)
  2. Zmienna a jest inkrementowana i wynosi 6
  3. Wartość b jest brana do pamięci (czyli 3)
  4. Zmienna b jest inkrementowana czyli wynosi 4
  5. Do pamięci brana jest zmienna c czyli 9
  6. Następuje dodanie i odejmowanie wartości z pamięci czyli 5+3-9
  7. Wynik (czyli -1) przypisywany jest do zmiennej a
0

a++ znaczy, że najpierw bierzesz wartość a a potem zwiększasz o 1.
masz 5 + 3 - 9 = -1
Po tej operacji wartość a=6, b=4

0

wyrywek kursu

int a = 5;
int b = 3;
int c = a+b++; //c=a+b, a dopiero później b = b+1;
    c = (a++)+b; //c=a+b, a następnie a = a+1

Dzięki za zainteresowanie. uczę się z kursu javastart i tam jest napisane że pierw jest wykonywane działanie a na końcu inkremantacja
czyli pierw a+b-c a następnie a++ i b++. wychodzi na to czyli 5+3-9=-1 + a+1 + b+1
czyli po działaniu a=-1 + a++ i b++ czyli zmienna a (-1) powinna wynosić 0 a b=4.
b =4 ale a mi się nie zgadza
szweszwe czyli wynik działania a = (a++)+(b++)-c; nie jest przypisywany do zmiennej a? bo napisałeś że po operacji a=6

Pinek czyli twoim sposobem myślenia inkremantacja dla zmiennej a nie działa bo wynik jest -1?

0

Jest przypisywany do zmiennej a. Ja napisałem, że po tej operacji tamta zmienna a jest inkrementowana.
Przykład ze stacka:

x = x++;

is equivalent to:

int tmp = x;
x++;
x = tmp;

Sam sobie możesz napisać przypadek taki jak:

int a = 2;
int b = 4;
b = a;
a = 12;

i tutaj wartość b nie będzie wynosiła 12 bo to nie są te same zmienne.

0
szweszwe napisał(a):

Jest przypisywany do zmiennej a. Ja napisałem, że po tej operacji tamta zmienna a jest inkrementowana.
Przykład ze stacka:

x = x++;

is equivalent to:

int tmp = x;
x++;
x = tmp;

Sam sobie możesz napisać przypadek taki jak:

int a = 2;
int b = 4;
b = a;
a = 12;

i tutaj wartość b nie będzie wynosiła 12 bo to nie są te same zmienne.

możesz mi przerobić ten kod


public class test {
	  public static void main(String[] args){
		  double a = 5;
		  double b = 3;
		  double c = 9;
		  System.out.println("a="+a+"\n"+"b="+b+"\n"+"c="+c);
		  a = (a++)+b-c;
		  System.out.println("a="+a+"\n"+"b="+b+"\n"+"c="+c);
		  
	  }
	  
	  
}

Tak aby był widoczny efekt inkrementowania zmiennej "a".
Nie mogę załapać

0

Dodatkowa zmienna d:

double a = 5;
double b = 3;
double c = 9;
double d = 0;
System.out.println("a=" + a + "\n" + "b=" + b + "\n" + "c=" + c + "\nd=" + d);
d = (a++) + b - c;
System.out.println("a=" + a + "\n" + "b=" + b + "\n" + "c=" + c + "\nd=" + d);
0

Dzięki, już wiem że mój kod nie zadziała tak jakbym chciał.

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