Input
Până acum, am scris toate valorile direct în programele noastre (hardcoded). E timpul să lăsăm utilizatorul să tasteze ceva. În Java, citim input-ul printr-un instrument numit Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Cum te cheama? ");
String nume = scanner.nextLine();
System.out.println("Salut, " + nume + "!");
}
}
Rulează codul, tastează ceva, apasă Enter
Au apărut două lucruri noi
- import java.util.Scanner; la început, înainte de public class. Asta îi spune lui Java: "Vreau să folosesc instrumentul Scanner din biblioteca standard a lui Java"
- Scanner scanner = new Scanner(System.in); creează un nou scanner care citește de la standard input (tastatura)
Citirea propriu-zisă se întâmplă cu scanner.nextLine(): așteaptă ca utilizatorul să tasteze o linie și să apese Enter, apoi returnează textul tastat ca un String
Pentru numere, Scanner are metode diferite
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Varsta ta: ");
int varsta = scanner.nextInt();
System.out.println("Anul viitor vei avea " + (varsta + 1));
}
}
scanner.nextInt() citește un număr întreg direct și ni-l dă gata ca int, fără să mai convertim noi nimic
Pentru numere zecimale, există scanner.nextDouble()
public class Main {
public static void main(String[] args) {
double inaltime = scanner.nextDouble();
}
}
O mică capcană care îi prinde pe toți. Dacă amesteci nextInt() și nextLine(), lucrurile devin ciudate
public class Main {
public static void main(String[] args) {
int varsta = scanner.nextInt();
String nume = scanner.nextLine(); // asta pare goala!
}
}
De ce? Pentru că nextInt() citește numărul dar lasă în urmă caracterul de linie nouă (newline). Apoi nextLine() preia acel newline gol și returnează imediat un șir gol
Soluția: adaugă un scanner.nextLine() suplimentar ca să "mănânce" newline-ul rămas
public class Main {
public static void main(String[] args) {
int varsta = scanner.nextInt();
scanner.nextLine(); // consuma newline-ul ramas
String nume = scanner.nextLine();
}
}
Enervant, dar trebuie să-l ții minte o singură dată
Ca să păstrăm lucrurile simple în acest exercițiu, vom citi mai întâi numele, apoi vârsta
Misiune: Înregistrarea Echipajului
Fiecare membru al echipajului care ajunge la stație trebuie să se înregistreze la terminal. Sistemul îi citește numele și vârsta, apoi afișează o linie de bun venit.
Creează un Scanner, citește mai întâi numele (prima linie), apoi vârsta (a doua linie). Apoi construiește și afișează mesajul de bun venit folosind +.
Citește datele direct, nu afișa nicio întrebare înainte de citire. Terminalul de înregistrare rămâne tăcut până la linia de bun venit.
Intrare (tastată de utilizator când rulează programul):
- Prima linie: numele membrului echipajului
- A doua linie: vârsta membrului echipajului
Exemplu
Dacă utilizatorul tastează
Cortez
60
programul tău ar trebui să afișeze
Salut Cortez, ai 60 de ani. Anul viitor vei avea 61