Για να λάβετε είσοδο από τον χρήστη στην Java, μπορείτε να χρησιμοποιήσετε την κλάση Scanner, η οποία ανήκει στο πακέτο java.util.
Για να χρησιμοποιήσετε την κλάση Scanner, πρέπει να δημιουργήσετε ένα αντικείμενο της κλάσης. Μπορείτε να το κάνετε με την ακόλουθη εντολή:
Scanner scanner = new Scanner(System.in);
Αφού δημιουργήσετε το αντικείμενο Scanner, μπορείτε να χρησιμοποιήσετε διάφορες μεθόδους που παρέχει η κλάση για να λάβετε είσοδο από τον χρήστη. Οι πιο κοινές μέθοδοι είναι:
nextLine()
: Διαβάζει μια γραμμή κειμένου από την είσοδο.nextInt()
: Διαβάζει έναν ακέραιο αριθμό από την είσοδο.nextDouble()
: Διαβάζει έναν δεκαδικό αριθμό από την είσοδο.
Αυτές είναι μερικές από τις διαθέσιμες μεθόδους που παρέχονται από την κλάση Scanner. Μπορείτε να δείτε περισσότερες λεπτομέρειες για την κλάση και τις μεθόδους της στην τεκμηρίωση της Java.
Στο παρακάτω παράδειγμα, θα χρησιμοποιήσουμε τη μέθοδο nextLine(), η οποία χρησιμοποιείται για την ανάγνωση συμβολοσειρών:
import java.util.Scanner; public class Main { public static void main(String[] args) { // Δημιουργία ενός αντικειμένου Scanner για λήψη εισόδου από το χρήστη Scanner myScanner = new Scanner(System.in); // Εμφάνιση μηνύματος προς το χρήστη για την εισαγωγή του ονόματος του System.out.println("Enter your name:"); // Ανάγνωση του ονόματος από τον χρήστη String name = myScanner.nextLine(); // Εμφάνιση μηνύματος καλωσορίσματος με το όνομα του χρήστη System.out.println("Hello " + name + "!"); } }
Ο παραπάνω κώδικας ζητά από τον χρήστη να εισάγει το όνομά του και στη συνέχεια το εμφανίζει με ένα μήνυμα καλωσορίσματος.
Ας αναλύσουμε τον κώδικα γραμμή προς γραμμή:
- Η γραμμή
import java.util.Scanner;
εισάγει την κλάσηScanner
από το πακέτοjava.util
. ΟScanner
χρησιμοποιείται για την ανάγνωση εισόδου από το χρήστη. - Η κλάση
Main
αρχίζει εδώ. - Η μέθοδος
main
είναι η κύρια μέθοδος του προγράμματος. Έχει τον τύπο επιστροφήςvoid
, που σημαίνει ότι δεν επιστρέφει κάποια τιμή. - Δημιουργείται ένα αντικείμενο
Scanner
με όνομαmyScanner
, το οποίο θα χρησιμοποιηθεί για να διαβάσει εισαγωγή από το χρήστη. - Εμφανίζεται το μήνυμα
"Enter your name:"
, ζητώντας από τον χρήστη να εισάγει το όνομά του. - Η μέθοδος
nextLine()
του αντικειμένουmyScanner
διαβάζει μια γραμμή κειμένου που εισάγει ο χρήστης και την εκχωρεί στη μεταβλητήname
τύπουString
. - Εμφανίζεται το μήνυμα
"Hello " + name + "!
, όπουname
είναι το όνομα που εισήγαγε ο χρήστης. Έτσι, εμφανίζεται ένα μήνυμα καλωσορίσματος με το όνομα του χρήστη.
Αυτός είναι ο σκοπός του κώδικα, να ζητήσει το όνομα του χρήστη και να το εμφανίσει με ένα μήνυμα καλωσορίσματος.
Η κλάση Scanner μπορεί να χρησιμοποιηθεί για την ανάγνωση διαφόρων τύπων εισόδου χρήστη, όπως ακέραιους αριθμούς, δεκαδικούς αριθμούς, χαρακτήρες, κλπ.
Για παράδειγμα, η μέθοδος nextInt() χρησιμοποιείται για την ανάγνωση ακεραίων αριθμών, η μέθοδος nextDouble() χρησιμοποιείται για την ανάγνωση δεκαδικών αριθμών, κ.λπ. Παρακάτω παρατίθενται παραδείγματα χρήσης αυτών των μεθόδων:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); // Ζητάμε από τον χρήστη να εισαγάγει έναν ακέραιο αριθμό System.out.println("Enter an integer:"); int myInt = myScanner.nextInt(); // Ζητάμε από τον χρήστη να εισαγάγει έναν δεκαδικό αριθμό System.out.println("Enter a double:"); double myDouble = myScanner.nextDouble(); // Ζητάμε από τον χρήστη να εισαγάγει έναν χαρακτήρα System.out.println("Enter a character:"); char myChar = myScanner.next().charAt(0); // Εμφανίζουμε τις τιμές που εισήγαγε ο χρήστης System.out.println("Your inputs: " + myInt + ", " + myDouble + ", " + myChar); } }
Ο παραπάνω κώδικας ζητά τρεις διαφορετικές τιμές από τον χρήστη: έναν ακέραιο αριθμό, έναν δεκαδικό αριθμό και έναν χαρακτήρα. Στη συνέχεια, εμφανίζει τις τιμές που εισήγαγε ο χρήστης.
Ας αναλύσουμε τον κώδικα γραμμή προς γραμμή:
- Η γραμμή
import java.util.Scanner;
εισάγει την κλάσηScanner
από το πακέτοjava.util
. ΟScanner
χρησιμοποιείται για την ανάγνωση εισόδου από το χρήστη. - Η κλάση
Main
αρχίζει εδώ. - Η μέθοδος
main
είναι η κύρια μέθοδος του προγράμματος. Έχει τον τύπο επιστροφήςvoid
, που σημαίνει ότι δεν επιστρέφει κάποια τιμή. - Δημιουργείται ένα αντικείμενο
Scanner
με όνομαmyScanner
, το οποίο θα χρησιμοποιηθεί για να διαβάσει εισαγωγή από το χρήστη. - Εμφανίζεται το μήνυμα
"Enter an integer:"
, ζητώντας από τον χρήστη να εισάγει έναν ακέραιο αριθμό. - Η μέθοδος
nextInt()
του αντικειμένουmyScanner
διαβάζει έναν ακέραιο αριθμό που εισάγει ο χρήστης και τον εκχωρεί στη μεταβλητήmyInt
τύπουint
. - Εμφανίζεται το μήνυμα `”Enter a double:”`, ζητώντας από τον χρήστη να εισάγει έναν δεκαδικό αριθμό.
- Η μέθοδος
nextDouble()
του αντικειμένουmyScanner
διαβάζει έναν δεκαδικό αριθμό που εισάγει ο χρήστης και τον εκχωρεί στη μεταβλητήmyDouble
τύπουdouble
. - Εμφανίζεται το μήνυμα
"Enter a character:"
, ζητώντας από τον χρήστη να εισάγει έναν χαρακτήρα. - Η μέθοδος
next()
του αντικειμένουmyScanner
διαβάζει μια λέξη που εισάγει ο χρήστης και επιστρέφει τον πρώτο χαρακτήρα της λέξης. Με τηνcharAt(0)
επιλέγουμε τον πρώτο χαρακτήρα και τον εκχωρούμε στη μεταβλητήmyChar
τύπουchar
. - Εμφανίζονται οι τιμές που εισήγαγε ο χρήστης με τη χρήση του τελεστή συνένωσης
+
. Οι τιμές εμφανίζονται ως μία συμβολοσειρά που περιέχει τον ακέραιο αριθμό, τον δεκαδικό αριθμό και τον χαρακτήρα, χρησιμοποιώντας τον τελεστή+
για τη συνένωση των στοιχείων.
Έτσι, ο κώδικας ζητά τρεις τιμές από τον χρήστη και τις εμφανίζει στην οθόνη.
[adinserter block=”2″]
Είναι σημαντικό να σημειωθεί ότι η κλάση Scanner μπορεί να προκαλέσει εξαιρέσεις (exceptions), όταν δεν είναι δυνατό να γίνει η ανάγνωση της εισόδου χρήστη. Για παράδειγμα, αν ο χρήστης εισαγάγει μια συμβολοσειρά αντί για έναν ακέραιο αριθμό, η μέθοδος nextInt() θα προκαλέσει μια εξαίρεση.
Για να αντιμετωπίσετε τις εξαιρέσεις που μπορεί να προκαλέσει η κλάση Scanner, μπορείτε να χρησιμοποιήσετε τη δήλωση try-catch. Η δήλωση try-catch επιτρέπει στο πρόγραμμά σας να συνεχίσει να εκτελείται ακόμη και αν προκληθεί μια εξαίρεση.
Παρακάτω παρατίθεται ένα παράδειγμα χρήσης της δήλωσης try-catch για την αντιμετώπιση των εξαιρέσεων που προκαλούνται από την κλάση Scanner:
import java.util.Scanner; public class Main { public static void main(String[] args) { // Δημιουργία ενός αντικειμένου Scanner για λήψη εισόδου από το χρήστη Scanner myScanner = new Scanner(System.in); // Εμφάνιση μηνύματος προς το χρήστη για την εισαγωγή ενός ακεραίου System.out.println("Enter an integer:"); try { // Διάβασμα ενός ακεραίου από τον χρήστη int myInt = myScanner.nextInt(); // Εμφάνιση μηνύματος με τον ακέραιο που εισήγαγε ο χρήστης System.out.println("You entered " + myInt); } catch (Exception e) { // Εμφάνιση μηνύματος σε περίπτωση ανεπιτυχούς ανάγνωσης ακεραίου System.out.println("Invalid input!"); } } }
Ο παραπάνω κώδικας ζητά από τον χρήστη να εισάγει έναν ακέραιο αριθμό και στη συνέχεια τον εμφανίζει.
Ας αναλύσουμε τον κώδικα γραμμή προς γραμμή:
- Η γραμμή
import java.util.Scanner;
εισάγει την κλάσηScanner
από το πακέτοjava.util
. ΟScanner
χρησιμοποιείται για την ανάγνωση εισόδου από το χρήστη. - Η κλάση
Main
αρχίζει εδώ. - Η μέθοδος
main
είναι η κύρια μέθοδος του προγράμματος. Έχει τον τύπο επιστροφήςvoid
, που σημαίνει ότι δεν επιστρέφει κάποια τιμή. - Δημιουργείται ένα αντικείμενο
Scanner
με όνομαmyScanner
, το οποίο θα χρησιμοποιηθεί για να διαβάσει εισαγωγή από το χρήστη. - Εμφανίζεται το μήνυμα
"Enter an integer:"
, ζητώντας από τον χρήστη να εισάγει έναν ακέραιο αριθμό. - Το πρόγραμμα προσπαθεί να διαβάσει έναν ακέραιο αριθμό που εισήγαγε ο χρήστης χρησιμοποιώντας τη μέθοδο
nextInt()
του αντικειμένουmyScanner
. Ο ακέραιος αποθηκεύεται στη μεταβλητήmyInt
. - Εμφανίζεται το μήνυμα
"You entered " + myInt
, όπουmyInt
είναι ο ακέραιος αριθμός που εισήγαγε ο χρήστης. Έτσι, εμφανίζεται τον ακέραιο αριθμό που εισήγαγε ο χρήστης.
- Αν συμβεί οποιοδήποτε σφάλμα κατά τη διάρκεια της ανάγνωσης του ακεραίου από τον χρήστη, τότε πιάνεται η εξαίρεση (
Exception
) και εμφανίζεται το μήνυμα"Invalid input!"
.
Συνολικά, ο κώδικας ζητά από τον χρήστη να εισάγει έναν ακέραιο αριθμό και τον εμφανίζει. Αν η είσοδος του χρήστη δεν είναι έγκυρη ακέραια τιμή, εμφανίζεται ένα μήνυμα λάθους.
Επιπλέον, είναι σημαντικό να θυμάστε ότι η κλάση Scanner χρησιμοποιεί πόρους συστήματος για την ανάγνωση εισόδου χρήστη. Για να αποφύγετε προβλήματα συστήματος, πρέπει να κλείνετε το αντικείμενο Scanner μετά τη χρήση του. Αυτό γίνεται με τη μέθοδο close():
import java.util.Scanner; public class Main { public static void main(String[] args) { // Δημιουργία ενός αντικειμένου Scanner για λήψη εισόδου από το χρήστη Scanner myScanner = new Scanner(System.in); // Εμφάνιση μηνύματος προς το χρήστη για την εισαγωγή μιας συμβολοσειράς System.out.println("Enter a string:"); // Ανάγνωση μιας συμβολοσειράς από τον χρήστη String myString = myScanner.nextLine(); // Εμφάνιση της εισαγόμενης συμβολοσειράς System.out.println("You entered: " + myString); // Κλείσιμο του αντικειμένου Scanner myScanner.close(); } }
Ο παραπάνω κώδικας ζητά από τον χρήστη να εισάγει μια συμβολοσειρά (κείμενο) και στη συνέχεια την εμφανίζει στην οθόνη.
Ας αναλύσουμε τον κώδικα γραμμή προς γραμμή:
- Η γραμμή
import java.util.Scanner;
εισάγει την κλάσηScanner
από το πακέτοjava.util
. ΟScanner
χρησιμοποιείται για την ανάγνωση εισόδου από το χρήστη. - Η κλάση
Main
αρχίζει εδώ. - Η μέθοδος
main
είναι η κύρια μέθοδος του προγράμματος. Έχει τον τύπο επιστροφήςvoid
, που σημαίνει ότι δεν επιστρέφει κάποια τιμή. - Δημιουργείται ένα αντικείμενο
Scanner
με όνομαmyScanner
, το οποίο θα χρησιμοποιηθεί για να διαβάσει εισαγωγή από το χρήστη. - Εμφανίζεται το μήνυμα
"Enter a string:"
, ζητώντας από τον χρήστη να εισάγει μια συμβολοσειρά. - Η μέθοδος
nextLine()
του αντικειμένουmyScanner
διαβάζει μια γραμμή κειμένου που εισάγει ο χρήστης και την εκχωρεί στη μεταβλητήmyString
τύπουString
. - Εμφανίζεται το μήνυμα
"You entered: " + myString
, όπουmyString
είναι η συμβολοσειρά που εισήγαγε ο χρήστης. Έτσι, εμφανίζεται η συμβολοσειρά που εισήγαγε ο χρήστης.
- Η μέθοδος
close()
του αντικειμένουmyScanner
κλείνει τον ανοικτό πόρο τουScanner
, δηλαδή το σύστημα ανάγνωσης εισόδου από το χρήστη.
Έτσι, ο κώδικας διαβάζει μια συμβολοσειρά από τον χρήστη και την εμφανίζει στην οθόνη.
Ένα παράδειγμα σφάλματος που μπορεί να προκληθεί από την κλάση Scanner είναι η εξαίρεση InputMismatchException. Αυτή η εξαίρεση προκαλείται όταν ο χρήστης εισαγάγει μια τιμή που δεν αντιστοιχεί στον τύπο δεδομένων που αναμένεται από την κλάση Scanner.
[adinserter block=”3″]
Παρακάτω παρατίθεται ένα παράδειγμα κώδικα που μπορεί να προκαλέσει την εξαίρεση InputMismatchException:
import java.util.Scanner; public class Main { public static void main(String[] args) { // Δημιουργία ενός αντικειμένου Scanner για λήψη εισόδου από το χρήστη Scanner myScanner = new Scanner(System.in); // Εμφάνιση μηνύματος προς το χρήστη για την εισαγωγή ενός ακεραίου αριθμού System.out.println("Enter an integer:"); // Ανάγνωση ενός ακεραίου από τον χρήστη int myInt = myScanner.nextInt(); // Εμφάνιση του ακεραίου που εισήγαγε ο χρήστης System.out.println("You entered " + myInt); // Κλείσιμο του αντικειμένου Scanner myScanner.close(); } }
Ο παραπάνω κώδικας ζητά από τον χρήστη να εισάγει έναν ακέραιο αριθμό και στη συνέχεια τον εμφανίζει.
Ας αναλύσουμε τον κώδικα γραμμή προς γραμμή:
- Η γραμμή
import java.util.Scanner;
εισάγει την κλάσηScanner
από το πακέτοjava.util
. ΟScanner
χρησιμοποιείται για την ανάγνωση εισόδου από το χρήστη. - Η κλάση
Main
αρχίζει εδώ. - Η μέθοδος
main
είναι η κύρια μέθοδος του προγράμματος. Έχει τον τύπο επιστροφήςvoid
, που σημαίνει ότι δεν επιστρέφει κάποια τιμή. - Δημιουργείται ένα αντικείμενο
Scanner
με όνομαmyScanner
, το οποίο θα χρησιμοποιηθεί για να διαβάσει εισαγωγή από το χρήστη. - Εμφανίζεται το μήνυμα
"Enter an integer:"
, ζητώντας από τον χρήστη να εισάγει έναν ακέραιο αριθμό. - Η μέθοδος
nextInt()
του αντικειμένουmyScanner
διαβάζει έναν ακέραιο αριθμό που εισάγει ο χρήστης και τον εκχωρεί στη μεταβλητήmyInt
τύπουint
. - Εμφανίζεται το μήνυμα
"You entered " + myInt
, όπουmyInt
είναι ο ακέραιος αριθμός που εισήγαγε ο χρήστης. Έτσι, εμφανίζεται ένα μήνυ
μα που δείχνει την είσοδο του χρήστη.
- Η μέθοδος
close()
κλείνει το αντικείμενοmyScanner
, απελευθερώνοντας τυχόν πόρους που χρησιμοποιήθηκαν από τοScanner
.
Ο κώδικας ζητά από τον χρήστη να εισάγει έναν ακέραιο αριθμό και τον εμφανίζει στην οθόνη.
Για να αντιμετωπίσετε αυτή την εξαίρεση, μπορείτε να χρησιμοποιήσετε τη δήλωση try-catch, όπως αναφέρθηκε προηγουμένως.
Τύποι δεδομένων που μπορούμε να διαβάσουμε από την κλάση Scanner:
Μέθοδος | Περιγραφή |
---|---|
nextBoolean() | Διαβάζει ένα boolean από τον χρήστη |
nextByte() | Διαβάζει ένα byte από τον χρήστη |
nextDouble() | Διαβάζει ένα double από τον χρήστη |
nextFloat() | Διαβάζει ένα float από τον χρήστη |
nextInt() | Διαβάζει ένα int από τον χρήστη |
nextLine() | Διαβάζει μια συμβολοσειρά από τον χρήστη |
nextLong() | Διαβάζει ένα long από τον χρήστη |
nextShort() | Διαβάζει ένα short από τον χρήστη |
Παρακάτω παρατίθεται ένα παράδειγμα χρήσης διαφορετικών μεθόδων για την ανάγνωση δεδομένων διαφόρων τύπων από το χρήστη:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); System.out.println("Enter your name:"); String name = myScanner.nextLine(); // Διάβασμα ονόματος από τον χρήστη System.out.println("Enter your age:"); int age = myScanner.nextInt(); // Διάβασμα ηλικίας από τον χρήστη System.out.println("Enter your height (in meters):"); double height = myScanner.nextDouble(); // Διάβασμα ύψους από τον χρήστη System.out.println("Enter your weight (in kilograms):"); float weight = myScanner.nextFloat(); // Διάβασμα βάρους από τον χρήστη System.out.println("Name: " + name); // Εκτύπωση ονόματος System.out.println("Age: " + age); // Εκτύπωση ηλικίας System.out.println("Height: " + height); // Εκτύπωση ύψους System.out.println("Weight: " + weight); // Εκτύπωση βάρους myScanner.close(); // Κλείσιμο του Scanner για αποδέσμευση πόρων } }
Ο παραπάνω κώδικας ζητά από τον χρήστη να εισάγει το όνομά του, την ηλικία του, το ύψος του και το βάρος του, και στη συνέχεια εκτυπώνει αυτές τις τιμές.
Συγκεκριμένα, ας δούμε τον κώδικα γραμμή προς γραμμή:
- Η γραμμή
import java.util.Scanner;
εισάγει την κλάσηScanner
από το πακέτοjava.util
. ΟScanner
χρησιμοποιείται για την ανάγνωση εισόδου από το χρήστη. - Η κλάση
Main
αρχίζει εδώ. - Η μέθοδος
main
είναι η κύρια μέθοδος του προγράμματος. - Δημιουργείται ένα αντικείμενο
Scanner
με όνομαmyScanner
, το οποίο θα χρησιμοποιηθεί για να διαβάσει εισαγωγή από το χρήστη. - Εμφανίζεται το μήνυμα
"Enter your name:"
, ζητώντας από τον χρήστη να εισάγει το όνομά του. - Η μέθοδος
nextLine()
του αντικειμένουmyScanner
διαβάζει μια γραμμή κειμένου που εισάγει ο χρήστης και την εκχωρεί στη μεταβλητήname
τύπουString
. - Εμφανίζεται το μήνυμα
"Enter your age:"
, ζητώντας από τον χρήστη να εισάγει την ηλικία του. - Η μέθοδος
nextInt()
του αντικειμένουmyScanner
διαβάζει έναν ακέραιο αριθμό που εισάγει ο χρήστης και τον εκχωρεί στη μεταβλητήage
τύπουint
. - Εμφανίζεται το μήνυμα
"Enter your height (in meters):"
, ζητώντας από τον χρήστη να εισάγει το ύψος του σε μέτρα. - Η μέθοδος
nextDouble()
του αντικειμένουmyScanner
διαβάζει έναν δεκαδικό αριθμό που εισάγει ο χρήστης και τον εκχωρεί στη μεταβλητήheight
τύπουdouble
. - Εμφανίζεται το μήνυμα
"Enter your weight (in kilograms):"
, ζητώντας από τον χρήστη να εισάγει το βάρος του σε κιλά. - Η μέθοδος
nextFloat()
του αντικειμένουmyScanner
διαβάζει έναν δεκαδικό αριθμό που εισάγει ο χρήστης και τον εκχωρεί στη μεταβλητήweight
τύπουfloat
. - Εμφανίζεται το μήνυμα
"Name: " + name
, εκτυπώνοντας το όνομα που εισήγαγε ο χρήστης. - Εμφανίζεται το μήνυμα
"Age: " + age
, εκτυπώνοντας την ηλικία που εισήγαγε ο χρήστης. - Εμφανίζεται το μήνυμα
"Height: " + height
, εκτυπώνοντας το ύψος που εισήγαγε ο χρήστης. - Εμφανίζεται το μήνυμα
"Weight: " + weight
, εκτυπώνοντας το βάρος που εισήγαγε ο χρήστης. - Η μέθοδος
close()
κλείνει το αντικείμενοmyScanner
, αποδεσμεύοντας τους πόρους που χρησιμοποιεί για την ανάγνωση εισόδου από το χρήστη.
Ο κώδικας αυτός εκτελεί τη λειτουργία της ανάγνωσης εισόδου από το χρήστη και της εμφάνισης των δεδομένων που εισήγαγε ο χρήστης στην οθόνη.