Hiển thị lại bảng menu khi nhập sai

package Employees;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int chon;
        Controller controller = new Controller();
        try {
            do {
                System.out.println("|-----------------------------------------------|");
                System.out.println("|1. Nhap danh sach nhan vien                    |");
                System.out.println("|2. Xuat danh sach nhan vien                    |");
                System.out.println("|3. Tim nhan vien theo ten co trong danh sach   |");
                System.out.println("|4. Xoa nhan vien theo ma                       |");
                System.out.println("|5. Sap xep nhan vien theo ten                  |");
                System.out.println("|6. Sap xep nhan vien theo thu nhap             |");
                System.out.println("|7. Tim nhan vien theo khoang thu nhap          |");
                System.out.println("|8. Hien thi 5 nhan vien co thu nhap cao nhat   |");
                System.out.println("|0. Thoat                                       |");
                System.out.println("|-----------------------------------------------|");
                System.out.println("Chon 1 chuc nang trong menu");
                chon = Integer.parseInt(sc.nextLine());
                switch (chon) {
                case 1:
                    controller.inputList(sc);
                    break;
                case 2:
                    controller.outList();
                    break;
                case 3:
                    controller.findEmployeesName(sc);
                    break;
                case 4:
                    controller.removeEmployeeId(sc);
                    break;
                case 5:
                    controller.sortEmployeesName();
                    break;
                case 6:
                    //sap xep nhan vien theo thu nhap
                    break;
                case 7:
                    //tim nhan vien theo khoang luong
                    break;
                case 8:
                    //hien thi top 5
                    break;
                case 0:
                    System.exit(0);
                    break;
                default:
                    System.out.println("Vui long chon lai");
                    break;
                }
            } while (chon != 0);
        } catch (Exception e) {
            System.err.println("Ban da nhap sai, vui long nhap lai");
        } finally {
            sc.close();
        }
    }
}

Kết quả
image
Mình muốn thông báo lỗi và hiển thị lại menu khi mình sai chứ không phải kết thúc câu lệnh

do {
     // làm gì đó
} while (not done)

về tổng thể, với ý muốn của bạn thì code nó sẽ như thế này
vấn đề là raise exception thì nó sẽ thoát ra khỏi vòng while
=> vậy hì phải làm sao cho khi có exception xảy ra thì không bị thoát ra khỏi vòng while
=> khi exception xảy ra thì nó vào block catch
=> vậy bỏ cái catch vô nằm trong while là được rồi
=> à, vậy là phải bỏ luôn cả try

=> sau một lúc thử thì nhận ra "à quên, đã bắt được exception thì phải làm sao cho điều kiện nó chạy tiếp
=> muốn chạy tiếp thì while nó sai => gán biến chọn bằng một giá trị gì đó khác 0 để vòng while tiếp tục chạy sau khi đã catch exception

5 Likes

while(true){
if(// điều kiện dừng){ break; }
// do something
}

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?