Lipiec 30, 2018

Operatory matematyczne

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ć.

  1. Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki dodawań: a+b+c+d, a+b, c+d, b+c, a+d.
  2. Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki odejmowania: a-b-c-d, a-b, c-d, b-c, a-d.
  3. 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.
  4. Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki dzielenia: a/b/c/d, a/b, c/d, b/c, a/d.
  5. Wczytaj od użytkownika cztery liczby i wypisz na ekran wyniki modulo: a%b%c%d, a%b, c%d, b%c, a%d.
  6. Wczytaj od użytkownika dwie liczby całkowitę i wypisz dla nich wyniki wszystkich operacji matematycznych tzn. dodawanie, odejmowanie, mnożenie, dzielenie oraz modulo.
  7. 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.