1. การอ่านจากคอนโซลโดยใช้System.in
ในบทเรียนก่อนหน้านี้ เราได้ทำความคุ้นเคยกับคำสั่งสำหรับการแสดงข้อมูลบนหน้าจอ ในการทำเช่นนี้ เราได้ใช้ อ็อบเจกต์ และเมธอดSystem.out
ของมัน มันง่ายและสะดวกprint()
println()
แต่อย่างที่คุณเดาได้อยู่แล้ว การแสดงข้อมูลบนหน้าจอนั้นไม่เพียงพอสำหรับเรา จุดประสงค์ของโปรแกรมส่วนใหญ่คือทำสิ่งที่มีประโยชน์สำหรับผู้ใช้ ซึ่งหมายความว่าผู้ใช้จำเป็นต้องป้อนข้อมูลจากแป้นพิมพ์บ่อยครั้งมาก
เช่นเดียวกับในกรณีของเอาต์พุต เรายังมีวัตถุพิเศษสำหรับการป้อนข้อมูลSystem.in
— แต่น่าเสียดายสำหรับเรา ไม่สะดวกเท่าที่เราต้องการ มันให้เราอ่านข้อมูลจากคีย์บอร์ดทีละตัวอักษร
เพื่อปรับปรุงสิ่งนี้ เราจะใช้คลาสอื่นที่เมื่อจับคู่กับวัตถุSystem.in
จะให้ทุกสิ่งที่เราต้องการ เป็นเวลานานแล้วที่ Java มีคลาสที่เหมาะกับทุกโอกาส และเราจะทำความรู้จักกับหนึ่งในนั้น
2. Scanner
ชั้นเรียน
คลาสScanner
(ชื่อเต็ม: java.util.Scanner
) สามารถอ่านข้อมูลจากแหล่งต่างๆ เช่น คอนโซล ไฟล์ และอินเทอร์เน็ต หากเราต้องการให้อ่านข้อมูลจากแป้นพิมพ์ เราจะต้องส่งวัตถุเป็นSystem.in
อาร์กิวเมนต์ที่จะทำหน้าที่เป็นแหล่งข้อมูล จากนั้นวัตถุเครื่องสแกนเนอร์จะเข้าใจว่าจะทำอย่างไรกับมัน
การอ่านจากแป้นพิมพ์โดยใช้Scanner
วัตถุจะมีลักษณะดังนี้:
รหัส | คำอธิบาย |
---|---|
|
เราสร้างScanner วัตถุ เราอ่านข้อความหนึ่งบรรทัดจากแป้นพิมพ์ เราอ่านตัวเลขจากแป้นพิมพ์ |
ดูเหมือนง่าย แต่มันง่ายขนาดนั้นจริงหรือ?
ฉันคิดว่าคุณต้องมีคำถามมากมาย และตอนนี้เราจะตอบคำถามเหล่านั้น
แต่ก่อนอื่น เรามาสาธิตตัวอย่างโปรแกรมที่สมบูรณ์ที่ใช้Scanner
คลาส:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
3. การสร้างScanner
วัตถุ
คำถามแรกคือบรรทัดนี้คืออะไรScanner console = new Scanner (System.in);
?
บรรทัดนี้อาจทำให้สับสน แต่คุณจะเห็นสิ่งที่คล้ายกันตลอดเวลา ดังนั้นเราจึงคิดว่าเป็นเรื่องสำคัญที่จะต้องอธิบายว่าเกิดอะไรขึ้นที่นี่
จำวิธีที่เราสร้างตัวแปรด้วยข้อความ:
String str = "text";
ขั้นแรก เราเขียนประเภทของตัวแปร ( String
) ตามด้วยชื่อ ( str
) และสุดท้าย หลังจากเครื่องหมายเท่ากับ เราเขียนค่า
บรรทัดที่ทำให้สับสนของเราเหมือนกัน:
Scanner console = new Scanner(System.in);
Scanner
ตัวแปร
ทุกอย่างทางซ้ายของเครื่องหมายเท่ากับคือการประกาศตัวแปรconsole
ที่มีประเภทScanner
เป็น คุณสามารถเรียกมันs
ว่า หรือscanner
หรือkeyboard
แม้แต่ จากนั้นรหัสจะมีลักษณะดังนี้:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
ฉันคิดว่านั่นทำให้ทุกอย่างชัดเจนขึ้นมาก
แต่รหัสทางด้านขวาของเครื่องหมายเท่ากับนั้นซับซ้อนกว่าเล็กน้อย ตอนนี้ฉันหมายถึงnew Scanner(System.in);
ที่กล่าวว่าไม่มีอะไรเหนือธรรมชาติเกิดขึ้นที่นี่เช่นกัน
ในรหัสนี้ เราบอกเครื่อง Java: สร้างวัตถุใหม่ ( new
คำหลัก) ซึ่งมีประเภทคือScanner
ส่งผ่านSystem.in
วัตถุเป็นแหล่งข้อมูลสำหรับScanner
วัตถุ ที่สร้างขึ้นใหม่
หลังจากดำเนินการทั้งบรรทัดนี้แล้ว เราจะมีScanner
ชื่อตัวแปรconsole
ที่โปรแกรมของเราจะใช้เพื่ออ่านข้อมูลจากแป้นพิมพ์
4. รายการวิธีการ
ในตัวอย่างข้างต้นScanner
console
ตัวแปรของเราจัดเก็บการอ้างอิงไปยังScanner
วัตถุ
ในการเรียกใช้เมธอดบนวัตถุที่อ้างอิงโดยตัวแปร คุณต้องเขียนจุดหลังชื่อตัวแปร ตามด้วยชื่อเมธอดและอาร์กิวเมนต์ใดๆ ลักษณะทั่วไปของคำสั่งมีดังนี้:
variable.method(arguments);
ตัวอย่าง:
System.out.println("Hello");
System.out.println(1);
หากคุณไม่ได้วางแผนที่จะส่งอาร์กิวเมนต์ไปยังฟังก์ชัน คุณก็แค่เขียนวงเล็บว่าง:
variable.method();
ตัวอย่าง:
System.out.println();
5. อินพุตคอนโซล
เมื่อเรามีScanner
วัตถุ การรับข้อมูลจากแป้นพิมพ์ทำได้ง่าย
หากต้องการอ่านบรรทัดจากแป้นพิมพ์คุณต้องใช้คำสั่งนี้:
String str = console.nextLine();
เมื่อการทำงานของโปรแกรมมาถึงบรรทัดนี้ มันจะหยุดชั่วคราวและรอให้ผู้ใช้ป้อนข้อมูลและกด Enter str
จากนั้นทุกอย่างที่ผู้ ใช้ป้อนจะถูกเก็บไว้ในตัวแปร
หากต้องการอ่านตัวเลขจากแป้นพิมพ์คุณต้องใช้คำสั่งนี้:
int number = console.nextInt();
ทุกอย่างที่นี่เป็นเหมือนคำสั่งก่อนหน้า เมื่อการทำงานของโปรแกรมมาถึงบรรทัดนี้ มันจะหยุดชั่วคราวและรอให้ผู้ใช้ป้อนข้อมูลและกด Enter หลังจากนั้น ทุกสิ่งที่ผู้ใช้ป้อนจะถูกแปลงเป็นตัวเลขและจัดเก็บไว้ในnumber
ตัวแปร
หากผู้ใช้ป้อนข้อมูลที่ไม่สามารถแปลงเป็นจำนวนเต็มได้ โปรแกรมจะเกิดข้อผิดพลาดและออก
หากต้องการอ่านตัวเลขที่เป็นเศษส่วนจากแป้นพิมพ์คุณต้องใช้คำสั่งนี้:
double number = console.nextDouble();
คำสั่งนี้คล้ายกับคำสั่งที่ใช้nextInt()
เมธอดมาก เพียงแต่ตรวจสอบว่าข้อมูลที่ป้อนสามารถแปลงเป็นdouble
ตัวเลขได้
ตัวอย่างของโปรแกรมที่อ่านตัวเลขสองตัวจากแป้นพิมพ์และแสดงผลรวมบนหน้าจอ:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
}
ผู้ใช้สามารถป้อนตัวเลขหลายตัวในบรรทัดเดียวโดยคั่นด้วยช่องว่าง: วิธีการของคลาสScanner
รู้วิธีจัดการสิ่งนี้ กล่าวคือ โปรแกรมจะอ่านตัวเลขหลังจากที่ผู้ใช้กดEnter
เท่านั้น
6. วิธีการอื่นของScanner
ชั้นเรียน
อย่างไรก็ตาม วิธีการข้างต้นไม่ใช่ทั้งหมดที่Scanner
ชั้นเรียนมีให้ รายการเมธอดทั้งหมดมีลักษณะดังนี้:
วิธี | คำอธิบาย |
---|---|
|
อ่านข้อมูลและแปลงเป็นbyte |
|
อ่านข้อมูลและแปลงเป็นshort |
|
อ่านข้อมูลและแปลงเป็นint |
|
อ่านข้อมูลและแปลงเป็นlong |
|
อ่านข้อมูลและแปลงเป็นfloat |
|
อ่านข้อมูลและแปลงเป็นdouble |
|
อ่านข้อมูลและแปลงเป็นboolean |
|
อ่านหนึ่ง "โทเค็น" โทเค็นจะถูกคั่นด้วยช่องว่างหรือการกดปุ่ม Enter |
|
อ่านทั้งบรรทัด |
นอกจากนี้ยังมีวิธีการที่ให้คุณตรวจสอบโทเค็นถัดไปในอินพุตโดยไม่ต้องดึงข้อมูลจริง (เพื่อให้รู้ว่าจะใช้วิธีใดในการอ่าน)
วิธี | คำอธิบาย |
---|---|
|
มีbyte ? อินพุตสามารถแปลงเป็นbyte ? |
|
มีshort ? อินพุตสามารถแปลงเป็นshort ? |
|
มีint ? อินพุตสามารถแปลงเป็นint ? |
|
มีlong ? อินพุตสามารถแปลงเป็นlong ? |
|
มีfloat ? อินพุตสามารถแปลงเป็นfloat ? |
|
มีdouble ? อินพุตสามารถแปลงเป็นdouble ? |
|
มีboolean ? อินพุตสามารถแปลงเป็นboolean ? |
|
มีโทเค็นอื่นหรือไม่? |
|
มีแนวอื่นอีกไหม |
7. การอ่านข้อมูลจากสตริง
ก่อนหน้านี้เราได้กล่าวไว้ว่าScanner
คลาสสามารถอ่านข้อมูลจากแหล่งต่างๆ หนึ่งในแหล่งที่มาเหล่านั้นคือสตริงข้อความ
ดูเหมือนว่า:
String str = "text";
Scanner scanner = new Scanner(str);
เมื่อสร้างScanner
วัตถุ เราจะส่งสตริงstr
แทนSystem.in
วัตถุ และตอนนี้scanner
วัตถุจะอ่านข้อมูลจากสตริง ตัวอย่าง:
รหัสโปรแกรม: | คำอธิบาย: |
---|---|
|
// ก == 10;
// ข == 20;
เอาต์พุตหน้าจอจะเป็น: |
GO TO FULL VERSION