ALGO25 / BLOG

Java: tipuri, condiții, bucle și metode

Învață tipurile Java, condițiile, buclele, array-urile și metodele printr-un program complet de numărare, cu rezultate explicate și cazuri limită.

Un program devine util când prelucrează date după o regulă. În această lecție numărăm câte scoruri ating un prag. Cerința este mică, dar introduce tipuri, array-uri, condiții, bucle și o metodă cu rezultat verificabil.

Ce trebuie să știi deja

Parcurge primul program Java și verifică faptul că poți compila Main.java. Lucrăm cu Java 21 și date definite în program. Scopul este să urmărești transformarea datelor, înainte să adăugăm citire de fișiere, HTTP sau o bază de date.

Contractul metodei este: primește un array nenul de scoruri întregi și un prag întreg; returnează numărul valorilor mai mari sau egale cu pragul. Un array gol este acceptat și produce zero. null nu este un array gol și nu face parte din intrările acceptate ale acestui exemplu.

Programul și rezultatul

public class Main {
    static int countPassing(int[] scores, int threshold) {
        int count = 0;
        for (int score : scores) {
            if (score >= threshold) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] scores = {4, 7, 10, 5};
        System.out.println(countPassing(scores, 5));
        System.out.println(countPassing(new int[0], 5));
        System.out.println(5 / 2);
        System.out.println(5 / 2.0);
    }
}

Compilează cu javac Main.java și rulează java Main. Ieșirea are patru linii: 3, 0, 2, 2.5. Nu trece direct la următorul articol până nu poți justifica fiecare linie.

Variabila count începe de la zero. Bucla citește succesiv scorurile 4, 7, 10 și 5. Pentru pragul 5, primul scor nu contribuie, iar următoarele trei contribuie fiecare cu unu. La final, return transmite rezultatul apelantului. Metoda nu afișează și nu modifică array-ul primit, ceea ce o face simplu de verificat.

Tipul schimbă sensul operației

int reprezintă valori întregi într-un interval finit. Expresia 5 / 2 folosește împărțire între întregi și produce 2. În 5 / 2.0, operandul zecimal conduce la calcul în virgulă mobilă și rezultatul este 2.5. Conversia făcută după o împărțire între întregi nu recuperează partea fracționară deja pierdută.

Nici int, nici long nu oferă întregi de dimensiune nelimitată. În exerciții cu sume mari trebuie să alegi tipul după limitele datelor. double are aproximări de reprezentare, deci nu transforma automat orice calcul în double doar pentru a evita o discuție despre limite.

Array, indice și lungime

Un array Java are lungime fixă după creare. Pentru patru elemente, indicii valizi sunt 0, 1, 2 și 3. Proprietatea length nu este ultimul indice. Bucla extinsă din exemplu este potrivită când ai nevoie doar de valorile elementelor; o buclă cu indice este utilă când poziția contează.

Variabila score din buclă primește pe rând fiecare valoare. Modificarea acestei variabile locale nu rescrie elementul original de tip int. Dacă cerința este să actualizezi array-ul, trebuie să alegi explicit poziția și atribuirea potrivită.

O metodă are un contract mic

Parametrii sunt datele necesare metodei. Variabilele locale aparțin apelului curent. Două apeluri nu împart același count, deoarece acesta este creat și inițializat în fiecare apel. countPassing descrie intenția mai clar decât un nume precum f într-un proiect de echipă.

Costul este O(n) în timp, pentru n scoruri, și O(1) memorie suplimentară. Nu sortăm array-ul, fiindcă ordinea nu influențează numărul valorilor acceptate. Alegerea unui algoritm simplu începe prin a observa ce informație este necesară rezultatului.

Exersează

  1. Schimbă pragul în 10. Rezultatul pentru primul array devine 1. Cu pragul 11 devine 0.
  2. Schimbă comparația în >. Pentru pragul 5 obții 2. Explică de ce cazul egalității este un test important.
  3. Scrie o metodă care numără scorurile sub prag. Pentru array-ul inițial și pragul 5, rezultatul este 1; pentru array-ul gol, zero.

Verifică înainte să continui

Ar trebui să poți trasa valorile variabilelor pe hârtie, să explici rezultatul împărțirii și să alegi teste pentru limita pragului. Continuă cu clase, interfețe și încapsulare, unde grupăm datele și comportamentul.

Întrebări frecvente

Este null echivalent cu un array gol?

Nu. Un array gol este un obiect valid cu lungimea zero. null înseamnă lipsa unei referințe către un array.

De ce nu sortăm scorurile?

Numărarea cere o singură parcurgere. Sortarea ar adăuga muncă fără să schimbe răspunsul.

Pot accesa elementul de la poziția length?

Nu. Ultima poziție validă este length - 1, dacă array-ul nu este gol.

Ce se întâmplă la un prag negativ?

Regula rămâne aceeași: numărăm valorile cel puțin egale cu pragul. Contractul nu limitează pragul la valori pozitive.

De ce metoda returnează int?

Rezultatul este un număr de elemente dintr-un array Java. Nu avem nevoie de parte fracționară pentru o numărare.

Surse

Fundamentele limbajului Java, consultate la 13 octombrie 2026. Exemple verificate cu JDK 21.