Operatory matematyczne
W poprzedniej lekcji kursu nauczyłeś się używać klasy Scanner do m.in. wczytywania liczb – czas zrobić coś z tym liczbami. W tej lekcji kursu nauczę Cię podstawowych operacji matematycznych na liczbach.
Od początku…
Rozpocznijmy od czystego projektu.
package pl.maniaq; public class Main { public static void main(String[] args) { } }
Zadeklarujmy sobię zmienną gdzie będziemy zapisywać sobie wynik operacji matematycznej.
int result;
Oraz stwórzmy sobię dwie zmienne, na których będziemy wykonywać operację matematyczne.
int firstValue = 5; int secondValue = 3;
I mamy już stworzony taki kod:
package pl.maniaq; public class Main { public static void main(String[] args) { int result; int firstValue = 5; int secondValue = 3; } }
Czas przejść do omawiania operatorów!
Dodawanie +
Do wykonania dodawania oczywiście użyjemy operatora +.
Wynik dodawania przypiszemy do zmiennej result.
result = firstValue + secondValue;
Oraz standardowo wyświetlimy sobie rezultat naszej operacji.
System.out.println("Wynik dodawania: " + result);
I teraz możemy przetestować działanie programu.
Wynik dodawania: 8
No i wszystko się zgadza, idziemy dalej!
Odejmowanie –
No to teraz odejmiemy nasze dwie liczby przy użyciu operatora –.
Ponownie nasz wynik zapiszemy do zmiennej result.
result = firstValue - secondValue;
A następnie go wyświetlimy:
System.out.println("Wynik odejmowania: " + result);
Nasz kod programu powinien wyglądać teraz tak:
package pl.maniaq; public class Main { public static void main(String[] args) { int result; int firstValue = 5; int secondValue = 3; result = firstValue + secondValue; System.out.println("Wynik dodawania: " + result); result = firstValue - secondValue; System.out.println("Wynik odejmowania: " + result); } }
A rezultat działania programu wyglądać tak:
Wynik dodawania: 8 Wynik odejmowania: 2
Mnożenie *
Nadszedł czas na pomnożenie dwóch liczb – przy użyciu operatora *.
result = firstValue * secondValue;
A wynik mnożenia wypisujemy analogicznie na ekran konsoli.
System.out.println("Wynik mnożenia: " + result);
Rezultat działa programu:
Wynik dodawania: 8 Wynik odejmowania: 2 Wynik mnożenia: 15
Dzielenie /
Tutaj zatrzymamy się nieco dłużej, na początek podzielmy dwie liczby przy użyciu operatora /.
result = firstValue / secondValue;
I analogicznie:
System.out.println("Wynik dzielenia: " + result);
No i program wypluwa nam coś takiego w konsoli:
Wynik dodawania: 8 Wynik odejmowania: 2 Wynik mnożenia: 15 Wynik dzielenia: 1
Zastanówmy się czy, aby na pewno wynik dzielenia 5/3 jest równy 1?
No nie, jednak kompilator robi to co mu każemy – każemy mu podzielić dwie liczby całkowite i zapisać to do liczby całkowitej? No to on to robi!
Podczas dzielenia firstValue / secondValue typ wyniku jest ustalany tak naprawdę na podstawie tego jaki typ jest w mianowniku. Skoro secondValue jest całkowita to wynik też będzie całkowity – czyli 1.
Gdybyśmy chcieli, aby nasz wynik był dokładniejszy to musimy zrzutować (czyli zrobić konwersję między liczbą całkowitą na zmiennoprzecinkową – tak jak wspominałem – oba te typy są inaczej zapisywane w komputerze) secondValue na typ zmiennoprzecinkowy np. float.
result = firstValue / (float) secondValue;
I już Intellij Idea krzyczy na nas w tym momencie, że typ wyniku nie zgadza się z typem zmiennej result. W tym celu musimy stworzyć kolejną zmienną wynikową typu float.
float nextResult = firstValue / (float) secondValue;
I wyświetlmy wynik:
System.out.println("Wynik dzielenia: " + nextResult);
A wynik ma się tym razem tak:
Wynik dodawania: 8 Wynik odejmowania: 2 Wynik mnożenia: 15 Wynik dzielenia: 1.6666666
Czyli cel został osiągnięty.
Dzielenie przez zero
Zostańmy jeszczę na chwilę przy dzieleniu – co z dzieleniem przez zero? W końcu dzisiejsza matematyka nie jest w stanie jeszcze opisać dzielenia przez zero – jest ono po prostu zakazane. Co z nim?
Spróbujmy, więc wykonać takie dzielenia, zobaczymy co na to kompilator.
float nextResult = firstValue / 0;
Po uruchomieniu programu otrzymujemy taki rezultat:
Exception in thread "main" java.lang.ArithmeticException: / by zero
Podczas działania programu został rzucony tzw. wyjątek – który mówi, że nie można wykonać dzielenia przez zero.
Wniosek jest prosty, jeżeli tworzymy nawet prosty kalkulator – to musimy zadbać o to, aby użytkownik nie próbował dzielić przez zero bo inaczej nasza aplikacja przestanie działać.
Modulo %
W programowaniu występuje jeszcze jeden operator matematyczny – modulo. Modulo tzw. oblicza resztę z dzielenia przy użyciu operatora %.
Zapiszmy, więc operację modulo na naszych liczbach:
result = firstValue % secondValue;
I wypiszemy sobie wynik operacji:
System.out.println("Wynik modulo: " + result);
I po uruchomieniu jednym z wyniku jest właśnie:
Wynik modulo: 2
Co się zgadza, w końcu 5/3 daje resztę 2.
Finalnie kod całej aplikacji wygląda tak:
public class Main { public static void main(String[] args){ int result; int firstValue = 5; int secondValue = 3; result = firstValue + secondValue; System.out.println("Wynik dodawania: " + result); result = firstValue - secondValue; System.out.println("Wynik odejmowania: " + result); result = firstValue * secondValue; System.out.println("Wynik mnożenia: " + result); float nextResult = firstValue / secondValue; System.out.println("Wynik dzielenia: " + nextResult); result = firstValue % secondValue; System.out.println("Wynik modulo: " + result); } }
Podsumowanie
Przedstawiłem Ci wszystkie operatory matematyczne jakie występują w Javie, w następnych lekcjach dowiesz sie o operatorach logicznych i instrukcjach warunkowych, które pozwolą Ci się np. zabezpieczyć przed złośliwym użytkownikiem chcącym dzielić przez 0.
A teraz wykonaj zadania, które przygotowałem dla Ciebie, abyś mógł się sprawdzić.
- Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki dodawań: a+b+c+d, a+b, c+d, b+c, a+d.
- Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki odejmowania: a-b-c-d, a-b, c-d, b-c, a-d.
- Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki mnożenia: a*b*c*d, a*b, c*d, b*c, a*d.
- Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki dzielenia: a/b/c/d, a/b, c/d, b/c, a/d.
- Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki modulo: a%b%c%d, a%b, c%d, b%c, a%d.
- Wczytaj od użytkownika dwie liczby całkowitę i wypisz dla nich wyniki wszystkich operacji matematycznych tzn. dodawanie, odejmowanie, mnożenie, dzielenie oraz modulo.
- Sprawdź wynik działania
int resultValue = 3 + 5 * 4 - 10 * 2;
Czy Java zachowuje kolejność wykonywania działań matematycznych?
Pamiętaj, aby stosować angielskie nazwy zmiennych!
Rozwiązania zadań możesz znaleźć tutaj.
W dzieleniu i mnożeniu jest “Wynik odejmowania”, a nie dzielenia i mnożenia.
Dzięki za reakcję, już naprawione. 😉