Operatory arytmetyczno logiczne
Spis treści
Zadanie
Napisz prosty kalkulator, w którym stworzysz 3 zmienne typu double o nazwach a, b, c. Do każdej z nich przypisz dowolną wartość. Wypróbuj wszystkie operatory matematyczne obliczając wynik działań:
- (a + b) * c
- a - b / c
Następnie użyj operatorów inkrementacji i zwiększ wszystkie zmienne o 1.
Teraz wyświetl wynik następujących zdań logicznych:
- czy (a + b) > c?
- czy a jest równe b?
Przedstaw wyniki w konsoli.
Rozwiązanie znajdziesz poniżej.
Rozwiązanie
Do rozwiązania zadania należało najpierw zdefiniować kilka zmiennych, a następnie wykorzystać różne operatory matematyczne i logiczne.
class MathOperations {
public static void main(String[] args) {
double a = 1.0;
double b = 2.0;
double 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));
}
}
Najpopularniejsze błędy, które mogły się tutaj pojawić to błędna kolejność wykonywania działań, którą możemy zmienić poprzez dodawanie odpowiednich nawiasów lub np. użycie operatora przypisania (pojedyncze =) zamiast operatora porównania (podwójne ==).
W rozwiązaniu można było także użyć dodatkowych zmiennych do zapamiętania wyników pośrednich poszczególnych zadań, np.
boolean result = (a + b) > c;
System.out.println("Czy a + b > c? " + ((a + b) > c));
Zamiast drukowania wyniku typu (a + b) * c = 9.0 można było także podstawić do drukowanego wyniku odpowiednie wartości, np.
System.out.println("(" + a + " + " + b + ")" + " * " + c + " = " + ((a + b) * c));
lub korzystając z metody printf() zapisać to samo w czytelniejszej formie:
System.out.printf("(%.2f + %.2f) * %.2f = %.2f", a, b, c, ((a + b) * c));
Zapis %.2f oznacza liczbę zmiennoprzecinkową, zaokrągloną do dwóch miejsc po przecinku.
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.
Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.
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).
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.
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:)
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); } }