เมื่อเขียนโปรแกรมในภาษา Java หรือภาษาอื่น ๆ คุณมักจะต้องใช้ข้อมูลอินพุตจากผู้ใช้ Java มีวิธีต่างๆ มากมายในการรับข้อมูลผู้ใช้ แต่วิธีที่พบได้บ่อยที่สุดและง่ายที่สุดในการใช้งานคือการใช้อ็อบเจ็กต์ Scanner
ขั้นตอน
วิธีที่ 1 จาก 2: วิดีโอ
ขั้นตอนที่ 1. นำเข้าคลาส Scanner
คุณสามารถเลือกที่จะนำเข้า
java.util. Scanner
ชั้นเรียนหรือทั้งหมด
java.util
บรรจุุภัณฑ์. หากต้องการนำเข้าคลาสหรือแพ็คเกจ ให้เพิ่มบรรทัดใดบรรทัดหนึ่งต่อไปนี้ที่ส่วนต้นของโค้ด:
นำเข้า java.util. Scanner; // สิ่งนี้จะนำเข้าเฉพาะคลาส Scanner นำเข้า java.util.*; // สิ่งนี้จะนำเข้าแพ็คเกจ java.util ทั้งหมด
ขั้นตอนที่ 2 เริ่มต้นวัตถุสแกนเนอร์ใหม่โดยส่ง
System.in
อินพุตสตรีมไปยังตัวสร้าง
System.in
เป็นกระแสอินพุตมาตรฐานที่เปิดอยู่แล้วและพร้อมที่จะให้ข้อมูลอินพุต โดยปกติกระแสนี้จะสอดคล้องกับการป้อนข้อมูลด้วยแป้นพิมพ์
สแกนเนอร์ userInputScanner = สแกนเนอร์ใหม่ (System.in);
ขั้นตอนที่ 3 อ่านข้อมูลอินพุตประเภทต่างๆ ที่ผู้ใช้ป้อน
คลาส Scanner รองรับการรับข้อมูลพื้นฐาน เช่น int, byte, short, long นอกเหนือจากการรับสตริง
-
ต่อไปนี้คือวิธีการบางอย่างที่มีให้ในคลาส Scanner:
-
อ่านไบต์ -
ถัดไปไบต์ ()
-
อ่านสั้น ๆ -
ถัดไปShort()
-
อ่าน int -
ต่อไปInt()
-
อ่านยาวๆ -
ถัดไปลอง()
-
อ่านลอย -
ถัดไปFloat()
-
อ่านคู่ -
ต่อไปดับเบิ้ล()
-
อ่านบูลีน -
ถัดไปบูลีน()
-
อ่านเต็มบรรทัด -
ต่อไปบรรทัด()
-
อ่านคำ -
ต่อไป()
-
-
นี่คือตัวอย่างของโปรแกรมที่ใช้เมธอดต่างๆ ของคลาส Scanner เพื่อรับอินพุตประเภทต่างๆ:
นำเข้า java.util. Scanner; ScannerExample คลาสสาธารณะ { โมฆะคงที่สาธารณะหลัก (สตริง args) {// เริ่มต้นสแกนเนอร์สแกนเนอร์ใหม่ userInputScanner = สแกนเนอร์ใหม่ (System.in); // ทดสอบ nextLine(); System.out.println("\nคุณชื่ออะไร "); ชื่อสตริง = userInputScanner.nextLine(); // ทดสอบ nextInt(); System.out.print("คุณมีแมวกี่ตัว?"); int numberOfCats = userInputScanner.nextInt(); // ทดสอบ nextDouble(); System.out.print("เงินในกระเป๋าของคุณมีเท่าไหร่? $"); moneyInWallet สองเท่า = userInputScanner.nextDouble(); System.out.println("\nสวัสดี " + ชื่อ + "! คุณมี " + numberOfCats + (numberOfCats > 1 ? " cats": " cat") + " และ $" + moneyInWallet + " ในกระเป๋าเงินของคุณ\n"); } }
วิธีที่ 2 จาก 2: การจัดการข้อยกเว้น
ขั้นตอนที่ 1 จัดการข้อยกเว้นอินพุต
หนึ่ง
InputMismatchException
ถูกส่งออกไปเมื่อผู้ใช้ป้อนข้อมูลที่ไม่ตรงกับประเภทที่ร้องขอ ตัวอย่างเช่น หากผู้ใช้ป้อนสตริงเมื่อมีการถาม int โปรแกรมจะโยน an
InputMismatchException
และออก มีหลายวิธีในการจัดการข้อยกเว้นนี้และแก้ไขปัญหานี้ เพื่อให้โปรแกรมของคุณสามารถป้องกันความผิดพลาดได้
ขั้นตอนที่ 2 ใช้บล็อก try-catch เพื่อจัดการกับ
InputMismatchException
.
นำเข้า java.util. InputMismatchException; นำเข้า java.util. Scanner; ScannerExample คลาสสาธารณะ { โมฆะคงที่สาธารณะหลัก (สตริง args) {// เริ่มต้นสแกนเนอร์สแกนเนอร์ใหม่ userInputScanner = สแกนเนอร์ใหม่ (System.in); // ทดสอบ nextLine(); System.out.print("\nคุณชื่ออะไร "); ชื่อสตริง = userInputScanner.nextLine(); // ทดสอบ nextInt(); บูลีน validInput = เท็จ; int numberOfCats = 0; while (!validInput) { System.out.print("คุณมีแมวกี่ตัว?"); ลอง { numberOfCats = userInputScanner.nextInt(); validInput = จริง; } จับ (InputMismatchException จ) { validInput = false; userInputScanner.nextLine(); } } // ทดสอบ nextDouble(); validInput = เท็จ; สองเท่า moneyInWallet = 0.0; ในขณะที่ (!validInput) { System.out.print("เงินในกระเป๋าของคุณมีเท่าไหร่? $"); ลอง { moneyInWallet = userInputScanner.nextDouble (); userInputScanner.nextLine(); validInput = จริง; } จับ (InputMismatchException จ) { validInput = false; userInputScanner.nextLine(); } } System.out.println("\nHello " + name + "! คุณมี " + numberOfCats + (numberOfCats > 1 ? " cats": "cat") + " and $" + moneyInWallet + " ในกระเป๋าเงินของคุณ\ NS"); } }
โปรดทราบว่าเราต้องนำเข้า
java.util. InputMismatchException
เพื่อที่จะใช้
InputMismatchException
กำลังเพิ่ม
userInputScanner.nextLine();
ขั้นตอนที่ 3 หรือทำให้การป้อนข้อมูลของผู้ใช้เข้าใจผิดได้โดยใช้เฉพาะบรรทัดถัดไปจากสแกนเนอร์เท่านั้น
ด้วยวิธีนี้ เราจึงมั่นใจได้ว่าทุกสิ่งที่ Scanner ส่งคืนนั้นเป็นออบเจกต์ String และจะไม่สร้างข้อยกเว้นใดๆ จากนั้น ในการแปลงสตริงเป็นจำนวนเต็มหรือสองเท่า เราสามารถใช้คลาสแรปเปอร์แบบจำนวนเต็มและแบบคู่
นำเข้า java.util. Scanner; ScannerExample คลาสสาธารณะ { โมฆะคงที่สาธารณะหลัก (สตริง args) {// เริ่มต้นสแกนเนอร์สแกนเนอร์ใหม่ userInputScanner = สแกนเนอร์ใหม่ (System.in); // ทดสอบ nextLine(); System.out.print("\nคุณชื่ออะไร "); ชื่อสตริง = userInputScanner.nextLine(); // ทดสอบ nextInt(); บูลีน validInput = เท็จ; int numberOfCats = 0; while (!validInput) { System.out.print("คุณมีแมวกี่ตัว?"); อินพุตสตริง = userInputScanner.nextLine (); ลอง { numberOfCats = Integer.parseInt (อินพุต); validInput = จริง; } จับ (NumberFormatException จ) { validInput = false; } } // ทดสอบ nextDouble(); validInput = เท็จ; สองเท่า moneyInWallet = 0.0; ในขณะที่ (!validInput) { System.out.print("เงินในกระเป๋าของคุณมีเท่าไหร่? $"); อินพุตสตริง = userInputScanner.nextLine (); ลอง { moneyInWallet = Double.parseDouble (อินพุต); validInput = จริง; } จับ (NumberFormatException จ) { validInput = false; } } System.out.println("\nHello " + name + "! คุณมี " + numberOfCats + (numberOfCats > 1 ? " cats": "cat") + " and $" + moneyInWallet + " ในกระเป๋าเงินของคุณ\ NS"); } }
โปรดทราบว่าที่นี่เราไม่ต้องนำเข้า
NumberFormatException
เราไม่ต้องล้างบัฟเฟอร์โดยใช้
userInputScanner.nextLine();
เคล็ดลับ
- ดู Scanner API สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้คลาส Scanner
- ใช้.next() แทน.nextLine() เสมอเพื่ออ่านคำถัดไป เนื่องจาก.nextLine() อาจมีปัญหาได้