inkrementacja oraz dekrementacja

Odpowiedz Nowy wątek
2018-06-01 10:25
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?

Pozostało 580 znaków

2018-06-01 10:38
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

edytowany 1x, ostatnio: Pinek, 2018-06-01 10:39

Pozostało 580 znaków

2018-06-01 10:38
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

edytowany 2x, ostatnio: szweszwe, 2018-06-01 10:40

Pozostało 580 znaków

2018-06-01 10:50
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?

edytowany 5x, ostatnio: cybershaman, 2018-06-01 11:23

Pozostało 580 znaków

2018-06-01 11:26
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.

Pozostało 580 znaków

2018-06-01 11:38
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ć

Pozostało 580 znaków

2018-06-01 11:44

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);
edytowany 1x, ostatnio: szweszwe, 2018-06-01 11:44

Pozostało 580 znaków

2018-06-01 11:46
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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