Twitter: @grzegg
Kategoria: java, Tagi: - .

Java [04] – Proste obliczenia

Głównym powodem dla którego tęgie głowy wymyślały maszyny liczące, zwane później komputerami było, jak sama nazwa wskazuje, prowadzenie obliczeń. Czas więc, dowiedzieć się jak zaprząc Javę do prostych działań matematycznych.

Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz tutaj

Ile to jest 2+2?

Zacznijmy od stworzenia nowego projektu a w nim nowej klasy o nazwie Obliczenia. Teraz spróbujmy obliczyć ile to jest 2+2. W ciele metody main napisz:


2+2;

Zauważ, że linijka została podkreślona czerwoną falistą linią, a po lewej pojawił się znak wykrzyknika w czerwonym polu:

Voila_Capture2014-07-08_11-20-37_AM.png

Zapewne sądzisz, że to nie może znaczyć nic dobrego. Masz rację. W ten sposób NetBeans IDE sygnalizuje, że w kodzie znajduje się błąd. Co więcej, informuje nas na czym ten błąd polega. Po najechaniu kursorem na podkreślony fragment, lub czerwony znaczek po lewej, pokazuje się dymek:


Znajduje się w nim informacja dotycząca rodzaju błędu a pod spodem sugestia, że jeśli naciśniemy kombinację klawiszy „Alt + Enter” to wyświetlą się podpowiedzi co należy zrobić.
Trzeba zaznaczyć, że informacje o błędach nie zawsze są jasne, zwłaszcza dla początkujących programistów, a podane sposoby rozwiązania nie zawsze słuszne. Niemniej, korzystanie z systemu podpowiedzi może znacznie usprawnić pracę.

Jak widać, otrzymujemy informację: not a statement, co można zrozumieć jako stwierdzenie, że to co napisaliśmy nie jest instrukcją, w sensie rozumianym przez język programowania, którym się posługujemy.
W niektórych językach, jak np. R takie wyrażenie zostałoby zrozumiane jako komenda dodawania dwu podanych liczb, a wynik zostałby wyświetlony. W Javie musimy je umieścić w jakimś kontekście. Teraz chcemy po prostu poznać wynik dodawania, więc trzeba jasno napisać, że wynik działania powinien zostać wyświetlony. Odpowiednią komendę już znamy i z niej korzystaliśmy. Zmodyfikujmy zatem linijkę w ten sposób:


System.out.println(2+2);

Teraz linia już się nie podświetla, program się wykonuje i w okienku na dole otrzymujemy wynik zgodnie z oczekiwaniami.
Zauważ, że tym razem nie umieszczaliśmy wyrażenia w cudzysłowach. Co się stanie gdy tak zrobimy?


System.out.println("2+2");

Tym razem po uruchomieniu programu zamiast 4 na ekranie pojawi się 2+2. Co się stało?
Poprzednio obie dwójki zostały potraktowane jako liczby a znak + jako operator dodawania. Obie liczby zostały więc dodane do siebie a wynik, jako argument, został skierowany do komendy, która jest odpowiedzialna za wydrukowanie argumentu. Kiedy umieściliśmy całe wyrażenie w cudzysłowach, zostało ono potraktowane jako tekst, a ściślej rzecz biorąc, jak to się nazywa w slangu programistów, jako łańcuch znaków, inaczej string. Łańcuchy znaków mogą, jak sama nazwa wskazuje, zawierać różne rodzaj znaków: litery, liczby, symbole. Niektóre z tych ostatnich wymagają specjalnego traktowania, o czym będzie jeszcze mowa.

Czy oba typy argumentów można łączyć ze sobą w jednym poleceniu? Spróbujmy czegoś takiego:


System.out.println("2+2="2+2);

Czerwony wężyk i złowrogi znaczek lewej stronie informują nas, że tak się nie da. Podpowiedź sugeruje, że brak zamknięcia nawiasu, ale ta sugestia niewiele nam pomaga. Zatem napiszmy tak:


System.out.println("2+2="+2+2);

Teraz NetBeans nie zgłasza błędu, program się uruchamia, ale wynik nieco odbiega od spodziewanego:


2+2=22

Chyba znów to nie jest to o co chodziło. Ale dlaczego wyszedł taki wynik? Komputer raczej potrafi liczyć, więc musiała być inna przyczyna niż błąd w rachunkach. Zauważ, że wynik jest sklejeniem dwu cyfr „2”. Zatem tym razem obie cyfry zostały potraktowane jako znaki a nie liczby. Stało się tak, dlatego że w wyrażeniu wystąpił łańcuch znaków 2+2=. Co więcej operator dodawania + tym razem zadziałał inaczej. Nie spowodował dodania cyfr w sensie matematycznym, ale skleił ze sobą znaki i dodał je do poprzedzającego łańcucha.

Co więc trzeba zrobić aby otrzymać w terminalu taki wynik: 2+2=4? Trzeba objąć wyrażenie, które ma być interpretowane jako obliczenia w nawias:


System.out.println("2+2 = "+(2+2));

Teraz wynik powinien być satysfakcjonujący.

Na głębsze przyjrzenie się możliwościom działań i operacji możliwych do przeprowadzenia na łańcuchach znaków jeszcze przyjdzie czas, na razie jednak wróćmy do liczb.

Cztery podstawowe działania arytmetyczne

Java udostępnia operatory pozwalające wykonać cztery podstawowe działania matematyczne, są to:

  • + – dodawanie
  • - – odejmowanie
  • * – mnożenie
  • / – dzielenie

Żeby sprawdzić ich działanie w praktyce, w metodzie main wpisz kod:


System.out.println("6+3 = "+(6+3));
System.out.println("6-3 = "+(6-3));
System.out.println("6*3 = "+(6*3));
System.out.println("6/3 = "+(6/3));

Wynik jest zgodny z oczekiwaniami:


6+3=9
6-3=3
6*3=18
6/3=2

Oczywiście nie jesteśmy skazani na jeden rodzaj działania w jednym wyrażeniu. Wymienione operatory można łączyć, np. tak:


System.out.println("6/3+10 = "+(6/3+10));

W celu zapewnienia właściwej kolejności wykonywania zadań możemy posługiwać się, nawiasami. Przy czym nie należy do tego celu używać innych nawiasów niż nawiasy okrągłe (…). Nawiasy kwadratowe […], klamrowe {…} czy ostrokątne <…> mają inne zastosowania:


System.out.println("(60/(3+7))*(6+3) = "+((60/(3+7))*(6+3)));

Java zapewnia prawidłową kolejność wykonywania działań, czyli mnożenie i dzielenie przed dodawaniem i odejmowaniem, ale w praktyce często stawia się nawiasy nawet tam gdzie nie są konieczne w celu zapewnienia klarowności zapisu działań.
Jeśli nawiasów robi się dużo, czasem trudno się połapać w ich ilości i prawidłowym rozmieszczeniu. NetBeans pomaga nam, pilnując, żeby liczba nawiasów otwierających zgadzała się z liczbą nawiasów zamykających, ale nie jest w stanie wyłapać błędów polegających na ich nieprawidłowym rozmieszczeniu np. w takiej sytuacji gdy zamiast wpisać: (2+4)/3 napiszemy 2+(4/3).

W przypadku skomplikowanych obliczeń, można zwiększyć czytelność kodu rozbijając wyrażenie na kilka linii, dopasowując położenie części wyrażenia za pomocą tabulatora i spacji, np tak:

System.out.println("(60/(3+7))*(6+3) = "
+((60/
(3+7))
*(6+3)));

Zauważ, że nie kończymy każdej linii znakiem średnika, znajduje się on dopiero na końcu całego wyrażenia.

Wśród podstawowych operatorów arytmetycznych Javy nie ma pozwalających na bezpośrednie potęgowanie, czy wyciąganie pierwiastków, nie mówiąc o obliczaniu silni. Na szczęście są one dostępne przy użyciu odpowiednich bibliotek, o czym także jeszcze będzie mowa. Java natomiast udostępnia dodatkowo kilka innych operatorów, których zastosowanie może nie być początkowo oczywiste dla każdego. Przyjrzymy się im w przyszłości.

Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz tutaj

Leave a Reply