0Pricing
Java Academy · บทเรียน

การตรวจสอบข้อมูลนำเข้าจากผู้ใช้

จัดการข้อมูลนำเข้าที่ไม่ถูกต้องอย่างเหมาะสม

การตรวจสอบข้อมูลนำเข้าจากผู้ใช้ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

อย่าไว้ใจข้อมูลป้อนเข้า

ผู้ใช้อาจพิมพ์ข้อมูลผิดได้ เช่น พิมพ์ตัวอักษรแทนตัวเลข ป้อนค่าว่าง หรือป้อนค่าที่อยู่นอกช่วง โปรแกรมที่รัดกุมจะตรวจสอบข้อมูลป้อนเข้าและขอให้ป้อนใหม่แทนที่จะหยุดทำงาน

บทเรียนนี้แสดงรูปแบบการตรวจสอบข้อมูลด้วย Scanner ที่จัดการข้อผิดพลาดอย่างเหมาะสม

ตรวจสอบก่อนอ่าน

วิธีป้องกันที่ง่ายที่สุดคือใช้ hasNextInt() โดยอ่านจำนวนเต็มเฉพาะเมื่อมีจำนวนเต็มอยู่จริง

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("42");
        if (scanner.hasNextInt()) {
            System.out.println("Got: " + scanner.nextInt());
        } else {
            System.out.println("Please enter a number");
        }
        scanner.close();
    }
}

วนซ้ำจนกว่าจะถูกต้อง

การวนซ้ำเพื่อลองใหม่จะขอข้อมูลไปเรื่อย ๆ จนกว่าจะได้รับจำนวนเต็มที่ถูกต้อง เมื่อโทเคนไม่ถูกต้อง ให้ทิ้งด้วย next() แล้วดำเนินการต่อ

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc xyz 50");
        int value = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                value = scanner.nextInt();
                break;
            }
            scanner.next();
        }
        System.out.println("Accepted: " + value);
        scanner.close();
    }
}

การตรวจสอบช่วงค่า

นอกเหนือจากประเภทแล้ว ค่าต่าง ๆ มักต้องอยู่ภายในช่วงที่กำหนด อ่านตัวเลขก่อน แล้วตรวจสอบค่าก่อนยอมรับ

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("7");
        int n = scanner.nextInt();
        if (n >= 1 && n <= 10) {
            System.out.println("Valid: " + n);
        } else {
            System.out.println("Out of range");
        }
        scanner.close();
    }
}

ใช้ Try-Catch ขณะแปลงข้อมูล

อีกวิธีหนึ่งคืออ่านทั้งบรรทัดแล้วแปลงข้อมูล โดยดักจับ NumberFormatException เมื่อข้อความไม่ถูกต้อง วิธีนี้ทำให้บัฟเฟอร์เรียบง่าย

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("notanumber");
        String line = scanner.nextLine();
        try {
            int n = Integer.parseInt(line.trim());
            System.out.println("Parsed: " + n);
        } catch (NumberFormatException e) {
            System.out.println("Invalid number: " + line);
        }
        scanner.close();
    }
}

ตรวจสอบว่าข้อความไม่ว่าง

สำหรับข้อมูลข้อความ ให้ปฏิเสธค่าว่าง isBlank() จะคืนค่าเป็นจริงสำหรับสตริงที่ว่างหรือมีเฉพาะช่องว่าง

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("   ");
        String name = scanner.nextLine();
        if (name.isBlank()) {
            System.out.println("Name cannot be empty");
        } else {
            System.out.println("Hello, " + name);
        }
        scanner.close();
    }
}

ตรวจสอบตัวเลือก

สำหรับตัวเลือกจากเมนู ให้ยืนยันว่าค่าเป็นหนึ่งในตัวเลือกที่อนุญาตก่อนนำไปใช้งาน

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("y");
        String choice = scanner.next().toLowerCase();
        if (choice.equals("y") || choice.equals("n")) {
            System.out.println("You chose: " + choice);
        } else {
            System.out.println("Please enter y or n");
        }
        scanner.close();
    }
}

เมธอดตรวจสอบที่นำกลับมาใช้ซ้ำได้

แยกตรรกะการตรวจสอบออกมาเป็นเมธอด เพื่อให้นำตรรกะนั้นกลับมาใช้ซ้ำได้ ในที่นี้เมธอดจะตรวจสอบว่าอายุอยู่ในช่วงที่สมเหตุสมผล

public class Main {
    static boolean isValidAge(int age) {
        return age >= 0 && age <= 120;
    }

    public static void main(String[] args) {
        System.out.println(isValidAge(30));
        System.out.println(isValidAge(-5));
    }
}

การรวมการตรวจสอบประเภทและช่วงค่า

การตรวจสอบข้อมูลจริงมักรวมการตรวจสอบประเภท การตรวจสอบช่วงค่า และการวนซ้ำเพื่อลองใหม่ไว้ในกระบวนการเดียวที่รัดกุม

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc 200 45");
        int valid = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                int n = scanner.nextInt();
                if (n >= 1 && n <= 100) {
                    valid = n;
                    break;
                }
            } else {
                scanner.next();
            }
        }
        System.out.println("Final: " + valid);
        scanner.close();
    }
}

ข้อความแจ้งข้อผิดพลาดที่ชัดเจน

การตรวจสอบที่ดีควรให้คำแนะนำตอบกลับที่เป็นประโยชน์แก่ผู้ใช้ด้วย บอกให้ชัดเจนว่าเกิดข้อผิดพลาดอะไรและคาดหวังข้อมูลแบบใด แทนการแจ้งความล้มเหลวแบบกว้าง ๆ

public class Main {
    static String validate(String input) {
        if (input.isBlank()) return "Input is empty";
        if (!input.matches("\\d+")) return "Only digits allowed";
        return "OK";
    }

    public static void main(String[] args) {
        System.out.println(validate(""));
        System.out.println(validate("12a"));
        System.out.println(validate("123"));
    }
}

กลยุทธ์การตรวจสอบ

ตรวจสอบประเภทด้วยกลุ่มเมธอด hasNext หรือใช้การลองและดักจับข้อผิดพลาด ตรวจสอบช่วงค่าและค่าว่าง วนซ้ำจนกว่าข้อมูลจะถูกต้อง และอธิบายข้อผิดพลาดอย่างชัดเจนเสมอ

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับการตรวจสอบข้อมูลป้อนเข้า

ทบทวน

คุณได้เรียนรู้การตรวจสอบข้อมูลป้อนเข้าอย่างเหมาะสมแล้ว:

  • ป้องกันข้อผิดพลาดด้วย hasNextInt หรือแปลงข้อมูลภายในบล็อกลองและดักจับข้อผิดพลาด
  • ใช้การวนซ้ำเพื่อลองใหม่ โดยทิ้งโทเคนที่ไม่ถูกต้องด้วย next()
  • ตรวจสอบช่วงค่าและปฏิเสธข้อความว่างด้วย isBlank
  • แยกเมธอดตรวจสอบที่นำกลับมาใช้ซ้ำได้
  • แสดงข้อความแจ้งข้อผิดพลาดที่ชัดเจนและเฉพาะเจาะจง

คำถามที่พบบ่อย

บทเรียน “การตรวจสอบข้อมูลนำเข้าจากผู้ใช้” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตรวจสอบข้อมูลนำเข้าจากผู้ใช้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบข้อมูลนำเข้าจากผู้ใช้”

จัดการข้อมูลนำเข้าที่ไม่ถูกต้องอย่างเหมาะสม คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การตรวจสอบข้อมูลนำเข้าจากผู้ใช้” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การอ่านข้อมูลนำเข้าด้วย Scanner
  2. การอ่านตัวเลขและบรรทัด
  3. การตรวจสอบข้อมูลนำเข้าจากผู้ใช้
  4. ทางเลือกนอกจาก BufferedReader
← กลับไปที่ Java Academy