Scanner.nextInt în Java

Citește următorul număr întreg (nextInt) sau zecimal (nextDouble); dă eroare dacă textul nu este un număr.

Sintaxă
int nextInt()
double nextDouble()
Scanner useLocale(Locale locale)

Ce face Scanner.nextInt

nextInt() sare peste spații și rânduri goale, citește următorul token și îl transformă în int. nextDouble() face la fel pentru numere cu zecimale. Poți citi mai multe numere de pe același rând, separate prin spații.

Dacă token-ul nu este un număr valid, aruncă InputMismatchException și token-ul rămâne necitit. Pentru a evita eroarea, verifică înainte cu hasNextInt() sau hasNextDouble().

nextDouble() folosește regulile limbii (Locale): în română separatorul zecimal este virgula (7,5), în engleză punctul (7.5). Cu sc.useLocale(Locale.US) sau sc.useLocale(Locale.of("ro", "RO")) alegi explicit regula, ca programul să meargă la fel pe orice calculator.

Ce returnează

Numărul citit: int, respectiv double.

Exemple

Exemplul 1: Suma și media a trei note

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Trei note: ");
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        System.out.println();
        System.out.println("Suma: " + (a + b + c));
        System.out.printf("Media: %.2f%n", (a + b + c) / 3.0);
    }
}

Ce scrie utilizatorul (intrare)

9 7
10

Rezultat

Trei note: 
Suma: 26
Media: 8.67

Exemplul 2: nextDouble și separatorul zecimal

Primul scanner citește după regula engleză (punct), al doilea după cea românească (virgulă).

import java.util.Locale;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner en = new Scanner("7.5 12.25").useLocale(Locale.US);
        System.out.println(en.nextDouble() + en.nextDouble());

        Scanner ro = new Scanner("7,5 12,25").useLocale(Locale.of("ro", "RO"));
        System.out.println(ro.nextDouble() + ro.nextDouble());

        en.close();
        ro.close();
    }
}

Rezultat

19.75
19.75

Exemplul 3: Ce se întâmplă când nu e număr

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            int cantitate = sc.nextInt();
            System.out.println("Cantitate: " + cantitate);
        } catch (InputMismatchException e) {
            System.out.println("Nu ai scris un număr întreg: " + sc.next());
        }
    }
}

Ce scrie utilizatorul (intrare)

doi

Rezultat

Nu ai scris un număr întreg: doi

Greșeli frecvente

  • Nu verifici intrarea: dacă utilizatorul scrie „doi”, programul se oprește cu InputMismatchException. Folosește hasNextInt().
  • Prinzi InputMismatchException într-o buclă și încerci din nou nextInt() fără să citești token-ul greșit cu next(): bucla nu se mai termină.
  • Testezi cu 7.5 pe un calculator setat în română și primești eroare. Setează useLocale.

Comenzi înrudite

  • Scanner.hasNextLine: Verifică fără să citească: hasNextLine dacă mai există un rând, hasNextInt dacă următorul token este un număr întreg.
  • Scanner.nextLine: Citește tot restul rândului curent (cu spații cu tot) și returnează textul fără sfârșitul de rând.
  • Scanner.next: Citește următorul cuvânt (token), adică textul până la primul spațiu sau sfârșit de rând.
  • Locale: Reprezintă o limbă și o țară (ro-RO, en-US); spune cum se formatează numere, bani, date și cum se compară textele.