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