Operatori

Aşa cum ai văzut şi în capitolele anterioare, în Java există o serie de operatori. În funcţie de scopul lor, aceştia pot fi împărţiţi în mai multe categorii.

Operatorul de atribuire

Acesta este =. Este folosit pentru a salva diverse valori în variabile. Tipul valorii salvate trebuie să corespundă cu tipul variabilei în care este salvată (de exemplu, nu putem salva un număr real ca 9.6 într-o variabilă de tip int).

int x = 7;
int y = 9;
double z = 3.9;

Operatori aritmetici

Aceştia sunt folosiţi pentru a realiza diverse operaţii matematice. Se folosesc semnele din matematică:

  • + adunare
  • - scădere
  • * înmulţire
  • / împărţire
  • % restul împărţirii

Exemplul de mai jos testează toate operaţiile matematice.

class DemoMatematic {

    public static void main (String[] args) {

        int rezultat = 1 + 2;
        // rezultatul este 3
        System.out.println("1 + 2 = " + rezultat);
        
        int rezultatOriginal = rezultat;
        rezultat = rezultat - 1; // rezultat = 3 - 1;
        // rezultatul este 2
        System.out.println(rezultatOriginal + " - 1 = " + rezultat);
        
        rezultatOriginal = rezultat;
        rezultat = rezultat * 2; // rezultat = 2 * 2;
        // rezultatul este 4
        System.out.println(rezultatOriginal + " * 2 = " + rezultat);
        
        rezultatOriginal = rezultat;
        rezultat = rezultat / 2; // rezultat = 4 / 2;
        // rezultatul este 2
        System.out.println(rezultatOriginal + " / 2 = " + rezultat);
        
        // Atenție: în Java, ca și în alte limbaje, rezultatul operației de împărțire 
        // este doar numărul întreg, fără rest. Exemplu: 5/2 = 2, nu 2.5;
        
        rezultatOriginal = rezultat;
        rezultat = rezultat + 8; // rezultat = 2 + 8;
        // rezultatul este 10
        System.out.println(rezultatOriginal + " + 8 = " + rezultat);
        
        rezultatOriginal = rezultat;
        rezultat = rezultat % 7; // rezultat = 10 % 7; // rezultatul operației modulo (%) este restul împărțirii
        // rezultatul este 3
        System.out.println(rezultatOriginal + " % 7 = " + rezultat);
    }
}

Operatori compuşi

Prin combinarea operatorului de atribuire cu un operator aritmetic, obţinem un operator aritmetic compus. Aceştia sunt:

  • +=
  • -=
  • *=
  • /=
  • %=

Aceştia se comportă ca şi cum am mai adăuga/scădea/etc. la o variabilă o anumită valoare. Programul anterior este rescris mai jos folosind aceşti operatori.

class DemoMatematic {

    public static void main (String[] args) {

        int rezultat = 1 + 2;
        // rezultatul este 3
        System.out.println("1 + 2 = " + rezultat);
        int rezultatOriginal = rezultat;

        rezultat -= 1;
        // rezultatul este 2
        System.out.println(rezultatOriginal + " - 1 = " + rezultat);
        rezultatOriginal = rezultat;

        rezultat *= 2;
        // rezultatul este 4
        System.out.println(rezultatOriginal + " * 2 = " + rezultat);
        rezultatOriginal = rezultat;

        rezultat /= 2;
        // rezultatul este 2
        System.out.println(rezultatOriginal + " / 2 = " + rezultat);
        rezultatOriginal = rezultat;

        rezultat += 8;
        // rezultatul este 10
        System.out.println(rezultatOriginal + " + 8 = " + rezultat);
        rezultatOriginal = rezultat;

        rezultat %= 7;
        // rezultatul este 3
        System.out.println(rezultatOriginal + " % 7 = " + rezultat);
    }
}

Astfel, cele două secvenţe de cod de mai jos sunt echivalente:

int x = 5;

// secventa 1:
x += 5;
System.out.println(x); // afiseaza 10

// secventa 2:
x = x + 5;
System.out.println(x); // afiseaza 10 daca ignoram secventa 1

Operatori aritmetici unari

Folosiţi în operaţiile cu un singur membru, cum ar fi adăugarea semnului pentru un număr. De exemplu, numărul natural -7 poate fi afişat în modul următor:

int x = 7;
System.out.println(-x);

- poate fi folosit pentru a nega un număr, pe când + practic nu are niciun efect.

Alţi operatori unari sunt ++ şi –– folosiţi pentru a creşte sau a scădea valoarea unei variabile cu o unitate.

int x = 8;
x++;
System.out.println(x); // afişează valoarea 9

int y = 7;
y--;
System.out.println(y); // afişează valoarea 6

Instrucţiunea x++; este echivalentă cu x += 1; şi cu x = x + 1;.

Operatori de egalitate şi operatori relaţionali

Aceştia verifică relaţia dintre 2 valori (dacă una din ele este mai mică, mai mare sau egală cu cealaltă). Atenţie: nu confundaţi operatorul = care este operator de atribuire cu operatorul == care este operator de comparaţie.

  • == verifică dacă 2 numere sunt egale
  • != opusul lui ==, verifică dacă 2 numere sunt diferite
  • < primul număr este strict mai mic ca al doilea
  • > primul număr este strict mai mare ca al doilea
  • <= primul număr este mai mic sau egal cu al doilea
  • >= primul număr este mai mare sau egal cu al doilea

Pe aceştia i-ai mai întâlnit şi la capitolul afişare.

Operatori logici

Aceştia ne ajută să verificăm mai multe condiţii o dată. Practic, ei sunt folosiţi pentru a combina mai multe variabile sau rezultate booleene pentru a verifica dacă este necesară doar o condiţie sau mai multe. Aceştia sunt:

  • && AND
  • || OR
  • ! NOT

Ei se aplică doar pe valori booleene şi au ca rezultat tot o valoare booleană.

x y x && y x || y !x
true true true true false
true false false true false
false true false true true
false false false false true

Aşadar, operatorul && aplicat între 2 variabile, va avea ca rezultat valoarea true, doar dacă cele 2 variabile sunt true şi true. Operatorul || va avea ca rezultat true dacă cel puţin unul din operani este true. Operatorul ! va avea ca rezultat opusul valorii variabilei.

boolean x = true;
boolean y = false;
boolean z = true;

System.out.println(x && y); // afişează false
System.out.println(x && z); // afişează true
System.out.println(x || y); // afişează true
System.out.println(!x); // afişează false - valoarea opusă a lui x

De obicei, nu folosim valori simple cu aceşti operatori, ci le combinăm în expresii mai complexe.

int x = 7;
System.out.println((x > 4) || (x < 0)); // una din condiţii trebuie să fie adevărată
System.out.println((x < 10) && (x > 0)); // ambele trebuie să fie adevăraţe

Operatorul ternar

Există şi un operator ternar, cu 3 termeni, rezultatul operaţiei fiind ales dintre doi termeni prestabiliţi în urma evaluării unei condiţii. Mai multe detalii la capitolul despre structura de control if-else.

Exerciţii

1. Scrieţi un program care să ceară 2 numere de la tastatură şi să afişeze rezultatele adunării, scăderii, împarţirii, înmulţirii şi modulo.

For the numbers 30 and 10.
The result of adding is 40.
The result of subtracting is 20.
The result of multiplying is 300.
The result of dividing is 3.
The result of module is 0.

Soluţie

Soluţie

import java.util.Scanner;

class Arithmetics {

    public static void main (String[] args) {

      Scanner sc = new Scanner(System.in);
      
      System.out.println("Introdu un numar:");
      int nr1 = sc.nextInt();
      System.out.println("Mai introdu un numar:");
      int nr2 = sc.nextInt();
      
      int suma = nr1 + nr2;
      int diferenta = nr1 - nr2;
      int produs = nr1 * nr2;
      int catul = nr1 / nr2;
      int modulo = nr1 % nr2;
      
      System.out.println("suma numerelor " + nr1 + " si " + nr2 + " este " + suma);
      System.out.println("diferenta numerelor " + nr1 + " si " + nr2 + " este " + diferenta);
      System.out.println("produsul numerelor " + nr1 + " si " + nr2 + " este " + produs);
      System.out.println("catul numerelor " + nr1 + " si " + nr2 + " este " + catul);
      System.out.println("modulo numerelor " + nr1 + " si " + nr2 + " este " + modulo);
      
    }
}


2. Să se verifice dacă un om este bogat sau sărac. Se vor folosi 3 variabile:

  • salariuLunar
  • areMostenire care este true dacă omul respectiv a mostenit ceva
  • membriFamilie - toţi membrii familiei lui, inclusiv el

Un om bogat are moştenire şi un salariu lunar mai mare de 10 000 RON, sau este un om care are un venit de 2 000 pe membru de familie (venitul este dat doar de salariul lui). Folosiţi o variabilă booleană care să vă indice dacă omul este sau nu bogat.

Soluţie

Soluţie

import java.util.Scanner;

class Arithmetics {

    public static void main (String[] args) {

      Scanner sc = new Scanner(System.in);
      
      System.out.println("Ce salariu ai?");
      double salariuLunar = sc.nextDouble();
      System.out.println("Ai mostenit ceva vreodata?");
      boolean areMostenire = sc.nextBoolean(); // se va introduce true sau false
      System.out.println("Câţi sunteţi în familie?");
      int membriFamilie = sc.nextInt();
      
      boolean esteBogat = (salariuLunar > 10000 && areMostenire) || ((salariuLunar / membriiFamilie) > 2000);
      System.out.println("Esti bogat: " + esteBogat);
      
    }
}


3. Să se determine valorile de adevăr pentru următoarele expresii:

(7 < 5)
(4 < 12)
(3 <= 4) || (5 == 7)
(8 > 4) && (2 <= 3)

Soluţie

Soluţie

class Conditions {

    public static void main (String[] args) {

        System.out.println(7 < 5);
        System.out.println(4 < 12);
        System.out.println((3 <= 4) || (5 == 7));
        System.out.println((8 > 4) && (2 <= 3));

    }
}


You could leave a comment if you were logged in.