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ștehasNextInt(). - Prinzi
InputMismatchExceptionîntr-o buclă și încerci din nounextInt()fără să citești token-ul greșit cunext(): bucla nu se mai termină. - Testezi cu
7.5pe 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.