Cách tối ưu viết code nếu nhập sai format cho phép thì sẽ thông báo và nhập lại

Tôi muốn khi tôi nhập sinh viên, nếu nhập sai format or quá số điểm cho phép thì sẽ bị thông báo và nhập lại

public void input(Scanner scanner) {
        Boolean error = false;
        do {
            try {
                System.out.println("Please input id:");
                id = Integer.parseInt(scanner.nextLine());
                System.out.println("Please input name:");
                name = scanner.nextLine();
                do {                    
                    System.out.println("Please input mark Math:");
                    markMath = Double.parseDouble(scanner.nextLine());
                    if (markMath < 0 || markMath > 100){
                        System.out.println("Input mark Math range 0 to 100");
                    }
                } while (markMath < 0 || markMath > 100);
                do {
                    System.out.println("Please input mark Physic:");
                    markPhysic = Double.parseDouble(scanner.nextLine());
                    if (markPhysic < 0 || markPhysic > 100){
                        System.out.println("Input mark Physic range 0 to 100");
                    }
                } while (markPhysic < 0 || markPhysic > 100);
                do {
                    System.out.println("Please input mark Chemistry");
                    markChemistry = Double.parseDouble(scanner.nextLine());
                    if (markChemistry < 0 || markChemistry > 100){
                        System.out.println("Input mark Chemistry range 0 to 100");
                    }
                } while (markChemistry < 0 || markChemistry > 100);

            } catch (Exception e) {
                System.out.println("Please enter the correct format");
                error = true;
            }
        } while (error == true);
    }

Mình muốn đoạn code tối ưu hơn nên mong ae chỉ giúp

Ở đây 3 đoạn nhập đang giống nhau nên bạn viết 1 hàm riêng.

public static int inputInteger(Scanner scanner, String input_prompt) {
    while (true) {
        try {
            System.out.println(input_prompt);
            return Integer.parseInt(scanner.nextLine());
        } catch (Exception e) {
            System.out.println("Please enter the correct format");
        }
    }
}

public static int inputDouble(Scanner scanner, String input_prompt, double minValue, double maxValue) {
    while (true) {
        try {
            System.out.println(input_prompt);
            double value = Double.parseDouble(scanner.nextLine());
            if (value < minValue || value > maxValue) {
                System.out.println(String.format("Out of range [%d, %d]", minValue, maxValue));
            } else {
                return value;
            }
        } catch (Exception e) {
            System.out.println("Please enter the correct format");
        }
    }
}

public void inputData(Scanner scanner) {
    // YourClass là tên class của bạn
    id = YourClass.inputInteger(scanner, "Please input id:");
    System.out.println("Please input name:");
    name = scanner.nextLine();
    markMath = YourClass.inputDouble(scanner, "Please input mark Math:", 0., 100.);
    markPhysic = YourClass.inputDouble(scanner, "Please input mark Physic:", 0., 100.);
    markChemistry = YourClass.inputDouble(scanner, "Please input mark Chemistry:", 0., 100.);
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?