การอ่านตัวเลขและบรรทัด
nextInt, nextLine และข้อควรระวัง
การอ่านตัวเลขและบรรทัด เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การอ่านตัวเลขตามชนิดข้อมูล
Scanner สามารถอ่านตัวเลขโดยตรงด้วยเมธอด เช่น nextInt และ nextDouble เมธอดเหล่านี้จะแปลงโทเคนถัดไปเป็นชนิดข้อมูลพื้นฐานที่ตรงกัน
การอ่านจำนวนเต็ม
nextInt() อ่านโทเคนถัดไปและส่งคืนเป็น int ในที่นี้เราใช้สตริงที่กำหนดไว้ล่วงหน้า จึงทำงานได้โดยไม่ต้องพิมพ์ข้อมูล
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("25");
int age = scanner.nextInt();
System.out.println(age + 1);
scanner.close();
}
}การอ่านจำนวนทศนิยม
nextDouble() อ่านค่าจำนวนทศนิยม จากนั้นคุณสามารถนำค่านั้นไปใช้ในการคำนวณได้
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("3.5");
double radius = scanner.nextDouble();
System.out.println(radius * 2);
scanner.close();
}
}การอ่านตัวเลขหลายค่า
การอ่านตัวเลขหลายครั้งจะดึงโทเคนต่อเนื่องกันไปทีละรายการ โดยข้ามช่องว่างระหว่างโทเคน
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("10 20 30");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
System.out.println(a + b + c);
scanner.close();
}
}การหาผลรวมจนกว่าจะเสร็จ
ใช้ hasNextInt() ร่วมกับ nextInt() เพื่ออ่านตัวเลขที่มีจำนวนไม่แน่นอนได้
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("5 15 25 35");
int total = 0;
while (scanner.hasNextInt()) {
total += scanner.nextInt();
}
System.out.println(total);
scanner.close();
}
}ข้อผิดพลาดคลาสสิกของ nextLine
นี่คือกับดักที่พบได้บ่อย nextInt() อ่านตัวเลขแล้ว แต่ยังเหลืออักขระบรรทัดใหม่อยู่ในบัฟเฟอร์ ดังนั้น nextLine() ครั้งถัดไปจะอ่านบรรทัดว่างที่ตกค้างนั้น แทนที่จะอ่านข้อความที่คุณคาดไว้
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nHello World");
int n = scanner.nextInt();
String line = scanner.nextLine();
System.out.println("Number: " + n);
System.out.println("Line: [" + line + "]");
scanner.close();
}
}การแก้ไขจุดพลาด
วิธีแก้คือเรียกใช้ nextLine() เพิ่มอีกครั้งหลัง nextInt() เพื่ออ่านอักขระขึ้นบรรทัดใหม่ที่ค้างอยู่ก่อนอ่านข้อมูลจากบรรทัดจริง
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nHello World");
int n = scanner.nextInt();
scanner.nextLine();
String line = scanner.nextLine();
System.out.println("Number: " + n);
System.out.println("Line: [" + line + "]");
scanner.close();
}
}การอ่านจำนวนเต็มชนิด Long และค่าบูลีน
Scanner ยังมี nextLong และ nextBoolean รวมถึงเมธอดอื่น ๆ แต่ละเมธอดจะอ่านโทเคนที่มีประเภทตรงกัน
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("9000000000 true");
long big = scanner.nextLong();
boolean flag = scanner.nextBoolean();
System.out.println(big);
System.out.println(flag);
scanner.close();
}
}ประเภทไม่ตรงกันทำให้เกิดข้อยกเว้น
หากโทเคนถัดไปไม่ใช่ตัวเลขที่ถูกต้อง nextInt จะทำให้เกิด InputMismatchException เมื่อไม่แน่ใจ ให้ตรวจสอบด้วย hasNextInt ก่อนเสมอ
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("abc");
try {
scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Not an integer!");
}
scanner.close();
}
}การอ่านตัวเลขอย่างปลอดภัย
รูปแบบที่รัดกุมจะอ่านข้อมูลเฉพาะเมื่อมีข้อมูลประเภทที่ถูกต้อง มิฉะนั้นจะอ่านและทิ้งโทเคนที่ไม่ถูกต้อง
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("x 7 y 9");
int sum = 0;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
sum += scanner.nextInt();
} else {
scanner.next();
}
}
System.out.println(sum);
scanner.close();
}
}ข้อเตือนใจสำคัญ
ใช้ nextInt และ nextDouble สำหรับตัวเลข ป้องกันข้อผิดพลาดด้วยกลุ่มเมธอด hasNext และอย่าลืมอ่านอักขระขึ้นบรรทัดใหม่ที่เหลืออยู่ก่อนเปลี่ยนไปใช้ nextLine
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการอ่านตัวเลขและบรรทัด
ทบทวน
คุณได้เรียนรู้การอ่านตัวเลขและบรรทัดแล้ว:
nextInt,nextDoubleและnextLongใช้อ่านตัวเลขตามประเภท- วนซ้ำด้วย
hasNextIntเมื่อไม่ทราบจำนวนข้อมูลล่วงหน้า - จุดพลาดเรื่องอักขระขึ้นบรรทัดใหม่: เรียกใช้
nextLineเพิ่มอีกครั้งหลังnextInt - โทเคนที่ไม่ถูกต้องทำให้เกิด
InputMismatchException - ป้องกันการอ่านข้อมูลด้วยกลุ่มเมธอด
hasNextเพื่อความปลอดภัย
คำถามที่พบบ่อย
บทเรียน “การอ่านตัวเลขและบรรทัด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การอ่านตัวเลขและบรรทัด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การอ่านตัวเลขและบรรทัด”
nextInt, nextLine และข้อควรระวัง คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การอ่านตัวเลขและบรรทัด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านข้อมูลนำเข้าด้วย Scanner
- การอ่านตัวเลขและบรรทัด
- การตรวจสอบข้อมูลนำเข้าจากผู้ใช้
- ทางเลือกนอกจาก BufferedReader