Όταν προγραμματίζετε σε Java ή οποιαδήποτε άλλη γλώσσα, πιθανότατα θα χρειαστεί να χρησιμοποιήσετε πληροφορίες εισόδου από έναν χρήστη. Η Java παρέχει πολλές διαφορετικές μεθόδους για τη λήψη πληροφοριών χρήστη, αλλά η πιο κοινή και ίσως η ευκολότερη εφαρμογή μέθοδος είναι η χρήση του αντικειμένου σαρωτή.
Βήματα
Μέθοδος 1 από 2: Βίντεο
Βήμα 1. Εισαγάγετε την κλάση σαρωτή
Μπορείτε είτε να επιλέξετε την εισαγωγή του
java.util. Scanner
τάξη ή ολόκληρη
java.util
πακέτο. Για να εισαγάγετε μια κλάση ή ένα πακέτο, προσθέστε μία από τις ακόλουθες γραμμές στην αρχή του κώδικα:
εισαγωγή java.util. Scanner; // Αυτό θα εισαγάγει μόνο την κλάση σαρωτή. εισαγωγή java.util.*; // Αυτό θα εισαγάγει ολόκληρο το πακέτο java.util.
Βήμα 2. Αρχικοποιήστε ένα νέο αντικείμενο σαρωτή περνώντας το
System.in
ροή εισόδου στον κατασκευαστή.
System.in
είναι η τυπική ροή εισόδου που είναι ήδη ανοιχτή και έτοιμη να παρέχει δεδομένα εισόδου. Συνήθως αυτή η ροή αντιστοιχεί στην εισαγωγή πληκτρολογίου.
Σαρωτής userInputScanner = νέος σαρωτής (System.in);
Βήμα 3. Διαβάστε σε διάφορα είδη δεδομένων εισόδου που εισάγει ο χρήστης
Η κλάση σαρωτή υποστηρίζει τη λήψη πρωτόγονων όπως int, byte, short, long εκτός από τη λήψη χορδών.
-
Ακολουθούν ορισμένες μέθοδοι που είναι διαθέσιμες μέσω της κλάσης Σαρωτής:
-
Διαβάστε ένα byte -
nextByte ()
-
Διαβάστε ένα σύντομο -
nextShort ()
-
Διαβάστε ένα int -
nextInt ()
-
Διαβάστε πολύ -
nextLong ()
-
Διαβάστε ένα πλωτήρα -
nextFloat ()
-
Διαβάστε ένα διπλό -
nextDouble ()
-
Διαβάστε ένα μπουλ -
nextBoolean ()
-
Διαβάστε μια πλήρη σειρά -
nextLine ()
-
Διαβάστε μια λέξη -
Επόμενο()
-
-
Ακολουθεί ένα παράδειγμα προγράμματος που χρησιμοποιεί διαφορετικές μεθόδους της κλάσης σαρωτή για να λάβει διαφορετικούς τύπους εισόδου:
εισαγωγή java.util. Scanner; public class ScannerExample {public static void main (String args) {// Έναρξη νέου σαρωτή σαρωτή userInputScanner = νέο σαρωτή (System.in); // Δοκιμή nextLine (); System.out.println ("\ nΠώς σας λένε;"); Όνομα συμβολοσειράς = userInputScanner.nextLine (); // Δοκιμή nextInt (); System.out.print ("Πόσες γάτες έχετε;"); int numberOfCats = userInputScanner.nextInt (); // Δοκιμή nextDouble (); System.out.print ("Πόσα χρήματα υπάρχουν στο πορτοφόλι σας; $"); double moneyInWallet = userInputScanner.nextDouble (); System.out.println ("\ nΓεια" + όνομα + "! Έχετε" + numberOfCats + (numberOfCats> 1; "cats": "cat") + "και $" + moneyInWallet + "στο πορτοφόλι σας. / N"); }}
Μέθοδος 2 από 2: Χειρισμός εξαιρέσεων
Βήμα 1. Χειριστείτε εξαιρέσεις εισαγωγής
Ενα
InputMismatchException
πετιέται όταν ο χρήστης εισάγει δεδομένα που δεν ταιριάζουν με τον τύπο που ζητήθηκε. Για παράδειγμα, εάν ο χρήστης εισάγει μια συμβολοσειρά όταν ζητηθεί ένα int, το πρόγραμμα θα ρίξει ένα
InputMismatchException
και έξοδο. Υπάρχουν διάφοροι τρόποι χειρισμού αυτής της εξαίρεσης και επίλυσης αυτού του προβλήματος, έτσι ώστε το πρόγραμμά σας να είναι άθικτο.
Βήμα 2. Χρησιμοποιήστε ένα μπλοκ try-catch για να χειριστείτε το
InputMismatchException
.
εισαγωγή java.util. InputMismatchException; εισαγωγή java.util. Scanner; public class ScannerExample {public static void main (String args) {// Έναρξη νέου σαρωτή σαρωτή userInputScanner = νέο σαρωτή (System.in); // Δοκιμή nextLine (); System.out.print ("\ nΠώς σας λένε;"); Όνομα συμβολοσειράς = userInputScanner.nextLine (); // Δοκιμή nextInt (); boolean validInput = false; int numberOfCats = 0; ενώ (! validInput) {System.out.print ("Πόσες γάτες έχετε;"); δοκιμάστε {numberOfCats = userInputScanner.nextInt (); validInput = true; } catch (InputMismatchException e) {validInput = false; userInputScanner.nextLine (); }} // Δοκιμή nextDouble (); validInput = false; διπλά χρήματαInWallet = 0,0; while (! validInput) {System.out.print ("Πόσα χρήματα υπάρχουν στο πορτοφόλι σας; $"); δοκιμάστε {moneyInWallet = userInputScanner.nextDouble (); userInputScanner.nextLine (); validInput = true; } catch (InputMismatchException e) {validInput = false; userInputScanner.nextLine (); }} System.out.println ("\ nΓεια" + όνομα + "! Έχετε" + numberOfCats + (numberOfCats> 1; "cats": "cat") + "και $" + moneyInWallet + "στο πορτοφόλι σας. / n "); }}
Σημειώστε ότι πρέπει να εισαγάγουμε
java.util. InputMismatchException
για να χρησιμοποιήσετε το
InputMismatchException
Προσθέτωντας
userInputScanner.nextLine ();
Βήμα 3. Εναλλακτικά, κάντε την είσοδο χρήστη άθικτη λαμβάνοντας μόνο τις επόμενες γραμμές από το σαρωτή
Με αυτόν τον τρόπο, μπορούμε να διασφαλίσουμε ότι όλα όσα επιστρέφει ο σαρωτής είναι αντικείμενο συμβολοσειράς και δεν δημιουργούν εξαιρέσεις. Στη συνέχεια, για να μετατρέψουμε τις συμβολοσειρές σε ακέραιους ή διπλούς, μπορούμε να χρησιμοποιήσουμε τις κλάσεις Integer και Double wrapper.
εισαγωγή java.util. Scanner; public class ScannerExample {public static void main (String args) {// Έναρξη νέου σαρωτή σαρωτή userInputScanner = νέο σαρωτή (System.in); // Δοκιμή nextLine (); System.out.print ("\ nΠώς σας λένε;"); Όνομα συμβολοσειράς = userInputScanner.nextLine (); // Δοκιμή nextInt (); boolean validInput = false; int numberOfCats = 0; ενώ (! validInput) {System.out.print ("Πόσες γάτες έχετε;"); String input = userInputScanner.nextLine (); δοκιμάστε {numberOfCats = Integer.parseInt (είσοδος); validInput = true; } catch (NumberFormatException e) {validInput = false; }} // Δοκιμή nextDouble (); validInput = false; διπλά χρήματαInWallet = 0,0; while (! validInput) {System.out.print ("Πόσα χρήματα υπάρχουν στο πορτοφόλι σας; $"); String input = userInputScanner.nextLine (); δοκιμάστε {moneyInWallet = Double.parseDouble (είσοδος); validInput = true; } catch (NumberFormatException e) {validInput = false; }} System.out.println ("\ nΓεια" + όνομα + "! Έχετε" + numberOfCats + (numberOfCats> 1; "cats": "cat") + "και $" + moneyInWallet + "στο πορτοφόλι σας. / n "); }}
Σημειώστε ότι εδώ δεν χρειάστηκε να εισαγάγουμε το
NumberFormatException
Επίσης, δεν χρειάστηκε να καθαρίσουμε το buffer χρησιμοποιώντας
userInputScanner.nextLine ();
Συμβουλές
- Ανατρέξτε στο API σαρωτή για περισσότερες πληροφορίες σχετικά με τη χρήση της κλάσης σαρωτή.
- Χρησιμοποιείτε πάντα.next () αντί για.nextLine () για να διαβάσετε την επόμενη λέξη, καθώς το.nextLine () μπορεί να είναι σφάλμα.