Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Rozwiązanie 1.3

Za zadanie było wykorzystać operatory matematyczne. Należało przy tym zwracać uwagę na nawiasy i kolejność wykonywania działań. Również operator porównania ==, mógł zostać tutaj zastąpiony operatorem przypisania = co jest oczywistym błędem.

public class Rozwiazanie{
  public static void main(String[] args){
	  double a,b,c;
	  a = 1.0;
	  b = 2.0;
	  c = 3.0;
	  System.out.println("(a+b)*c= "+((a+b)*c));
	  System.out.println("a-b/c= "+(a-b/c));

	  a++;
	  b++;
	  c++;

	  System.out.println("Czy a+b>c? "+((a+b)>c));
	  System.out.println("Czy a=b? "+(a==b));
  }
}

Komentarze

YeeeZooo

Mam pytanie co do tego zapisu:
a++;
b++;
c++;
Jak potem wyświetlę sobie te zmienne println(a) itd. to zostają te same wartości - brak ikrementacji? Nie rozumiem tego, przecież powinna być ikrementacja a w następnej linii jak wyświetlam zmienną to jej wartość powinna się powiększyć o 1, a tak nie jest.
Dopiero zastosowanie ikrementacji tej ++a i wyświetlenie zmiennej w kolejnej linii daje poprawny wynik.

YeeeZooo

odwołuje to co wyżej napisałem, wszystko ok zamiast napisać
a++;
napisałem
a = a++;
i wyświetlałem zmienną a i jej wartość zostawała tak sama, co też w sumie mnie jednak dziwi, że nie było ikrementacji, bo przy zapisie a = ++a; i wyświetleniu zmiennej a, ikrementacja jest?

Slawek

Ciężko jest to wytłumaczyć, ale mniej więcej wygląda to tak:
dla a=a++
temp = a;
a = a+1;
a = temp; //gdzie temp to jakaś zmienna pomocnicza
natomiast a=++a to coś takiego:
b = a;
b = b+1;
a = b;
Ciężko to sobie wyobrazić, szczególnie gdy operujemy właśnie tylko na jednej zmiennej.
Będzie o tym w każdym bądź razie jedna z zagadek w javaTraps :)

Quibol

bardzo łatwo to wyjaśnić:
a=a++; tutaj najpierw przypisujesz wartość "a" a następnie zwiększasz "++"
a=++a; natoniast tutaj najpierw zwiększasz "++" a następnie przypisujesz"a"
to chyba logiczne :)

kepner

niby logiczne a wygląda że jest odwrotnie
a=1; b=1;
a=a++;
System.out.println("gdy a=a++ to "+a); -> daje wynik 1.0
b=++b;
System.out.println("gdy b=++b to "+b); daje wynik 2.0

Marcin Kunert

1. a=1; b=1; ----> b=1
2. b=++b; ----> b=2
3. System.out.println(„gdy b=++b to „+b); ----> "wyświetl b, a potem zwiększ" podczas wypisywania b=2, a potem b=3

Mereel

Ja mam troszke inne pytanko
wyswietlilem sobie nasze zmienne, po przepisaniu calego rozwiazania:

System.out.println (a);// a=3
System.out.println (b);// b=3

o ile rozumie czemu b=3, to nie moge pojac dlaczego a=3

Slawek

Coś musiałeś źle przepisać :)

Lu

Witam, kompiluje ten kod w JCreatorze i przy zapisie:

System.out.println("Czy a+b>c? "+((a+b)>c));

wyswietla mi blad co do znaku wiekszosci ">"
error: bad operand types for binary operator '>'

Co mam zrobic zeby to skompilowac?

shaftpl

Sprawdz czy masz wszystkie nawiasy pozamykane. Powinno byc tak:
System.out.println("czy (a+b)>c? "+((a+b)>c));

Adrianus123

public class kal{
public static void main(String[] args){
int a = 1;
int b = 2;
int c = 3;
System.out.println((a+b)*c);
System.out.println(((a-b)/c)+",("+((a-b)%c)+"/"+(c)+")");//ułamek

a++;
b++;
c++;

System.out.println((a+b)>c);
System.out.println(a==b);
}
}

to samo ale z ułamkiem

Lelek

czy to jest jakaś ukryta definicja zmiennych?

System.out.println("Czy a=b? "+(a==b));

dawio966

Bardzo fajnie się javy uczy, dzisiaj parę godzin temu rozpocząłem, jestem już w tym kroku.
Ja napisałem kalkulatorek trochę inaczej.
public class Kalkulatorek{
public static void main(String[] args){
double a = 50;
double b = 10;
double c = 5;
// 300
double dodajodejmij = (a+b)*c;
System.out.println(dodajodejmij);
// 8
double odejmijpodziel = (a-b)/c;
System.out.println(odejmijpodziel);

// KONTROLA
boolean prawda = (a+b)>c; //PRAWDA
boolean falsz = (a<=b); //FALSZ
System.out.println(prawda);
System.out.println(falsz);
}
}

Bartosz

mam mały problem, albo ja czegoś nie rozumiem a mianowicie:
System.out.println("Czy a=b? "+(a==b));
wartość zmiennej a i jest taka sama a program wyświetla komunikat ze to fałsz? program wyglada podobnie jak rozwiąznie.

Sławek Ludwiczak

To jest porównanie wartości. Jeśli a i b są sobie równe to otrzymujemy TRUE, jeśli są różne to otrzymujemy FALSE. Należy tu uważać na fakt, że dla typów obiektowych działa to inaczej i za pomocą tego operatora można porównywać bezpiecznie tylko boolean, short, int i inne typy liczbowe proste.

Bartosz

Okej juz rozumiem dziekuje za pomoc :)

mwarw

Ja zrobiłem to tak:
public class Kalkulator{
public static void main(String[] args){
double a=5;
double b=6;
double c=7;

boolean sprawdzenie1 = (a+b)>c;
boolean sprawdzenie2 = a==c;
System.out.println(sprawdzenie1);
System.out.println(sprawdzenie2);
}
}

Andrzej

public class Kalkulator{
public static void main(String[] args){
double a = 6.0;
double b = 8.6;
double c = 20.0;
double d = (a+b)/c;
d = (a-b)/c;

a++;
b++;
c++;


boolean porownanie1 = a+b>=c;
boolean porownanie2 = a==b;
System.out.println(porownanie1);
System.out.println(porownanie2);
}
}

Tak jest dobrze?
Konsola wyświetliła dobry wynik
2x false

mralexx

System.out.println("(a+b)*c= "+((a+b)*c));
System.out.println("a-b/c= "+(a-b/c));

co oznacza ten plus ->+((a+b...
oraz ten ->+(a-b....

lolo

Oznaczają one tyle, że do ciągu (a+b)*c= który zostanie wyświetlony ma zostać dodany wynik działania ((a+b)*c) i analogicznie w drugim przykładzie. Do ciągu a-b/c= ma zostać dodany i wyświetlony wynik działania (a-b/c).

snt.banzai

Witam, mam problem natury logicznej. Mój kod:

public class Operatory2{
public static void main(String[] args){
double a=4.5;
double b=6.7;
double c=a+b;

System.out.println("Działanie pierwsze: "+((a+b)*c));
System.out.println("Działanie drugie: "+(a-b/c));

double d=++a;
double e=++b;
double f=++c;
System.out.println("Inkrementacja pierwsza: "+d);
System.out.println("Inkrementacja druga: "+e);
System.out.println("Inkrementacja trzecia: "+f);

boolean porównanie1=((a+b)>c);
System.out.println("Porównanie pierwsze: "+porównanie1);
boolean porównanie2=(a==b);
System.out.println("Porównanie drugie: "+porównanie2);
}
}

Dla kodu "boolean porównanie1=((a+b)>c);" system zwraca wartość true a nie powinien jak sądze (obie wartości są bowiem równe).

Sławek Ludwiczak

Wartości nie są sobie równe. Zwróć uwagę, że przypisując zmienne d, e, f, wartości a i b zwiększasz łącznie o 2, natomiast zmienną c zwiększasz o 1.

snt.banzai

aaa racja:)

Janosch

Zgadza się, będzie wartość true, bo w miejscu gdzie przypisujesz do zmiennej "d" zmienną "a" (double d=++a;) inkrementujesz zmienną "a", natomiast w pamięci zmienna "c" jest cały czas sumą początkowej wartości "a" wynoszącej 4.5 i "b" wynoszącej 6.7.
Działanie d=++a ma także wpływ na zmienną "a" trwale, zwiększa ją przed dodaniem.
Takie jest moje zdanie.

Dofgus

Mój kod. Czy tak może być?

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

double a = 2;
double b = 3;
double c = 4;

double d = (a+b)*c;
double e = a-b/c;

double f = a++;
double g = b++;
double h = c++;

boolean porownanie1 = (f+g)>h;
boolean porownanie2 = f==g;

System.out.println("(a+b)*C = "+d);
System.out.println("a-b/c = "+e);

System.out.println("Czy (a+b)>c?" + porownanie1);
System.out.println("Czy a=b?" + porownanie2);

}
}