01/10/2018, 00:29

Ai giải thích cho mình rõ về ngoại lệ do người dùng tạo với. JAVA

mình làm như này:

package bai3;

import java.util.InputMismatchException;
import java.util.Scanner;

public class SinhVien {
	private int ngay;
	private int thang;
	private int nam;

public int getNgay() {
	return ngay;
}

public void setNgay(int ngay) throws DateException {

	if (ngay < 1 || ngay > 31) {
		throw new DateException();
	}
	this.ngay = ngay;
}

public int getThang() {
	return thang;
}

public void setThang(int thang) throws DateException {
	if (thang < 1 || thang > 12) {
		throw new DateException();
	}
	this.thang = thang;
}

public int getNam() {
	return nam;
}

public void setNam(int nam) throws DateException {
	if (nam > 2016) {
		throw new DateException();
	}
	this.nam = nam;
}

public static void main(String[] args) {
	SinhVien sva = new SinhVien();

	boolean check = false;
	while (!check) {
		try {
			System.out.println("Nhap ngay sinh");
			sva.setNgay(new Scanner(System.in).nextInt());
			System.out.println("Nhap thang");
			sva.setThang(new Scanner(System.in).nextInt());
			System.out.println("Nhap nam");
			sva.setNam(new Scanner(System.in).nextInt());
			check = true;
		} catch (DateException e) {
			System.out.println(e.getMessage());
		} catch (InputMismatchException e) {
			System.out.println("Loi, moi nhap lai");
		}
	}
	System.out.println(
			"ngay thang nam sinh vua nhap la: " + sva.getNgay() + "-" + sva.getThang() + "-" + sva.getNam());

}

}

và DateException đây:

package bai3;

public class DateException extends Exception {

	public DateException() {
		
	}
	@Override
	public String getMessage() {
		// TODO Auto-generated method stub
		return ("lỗi, cần phải nhập đúng ngày, tháng, năm");
	}
}

mình làm như vậy là để thêm mỗi cái getMessage, khi lỗi thì tạo ra một đối tượng ngoại lệ và sau đó getMessage, ở đoạn set ngay tháng năm thì phải dùng if(…) sau đó throw rất là rắc rối,
Liệu mình có thể viết như thế nào ngay vào trong class DateException được không rồi sau đó try catch giống như với ArithmeticException,… có sẵn đó

Pete Houston viết 02:29 ngày 01/10/2018

Như này?

package bai3;

public class DateException extends Exception {

	public DateException() {}
	public DateException(String message) {super(message);}
}

public class SvDate {
        private int ngay, thang, nam;
        public SvDate(int ngay, int thang, int nam) {
            this.ngay = ngay;
            this.thang = thang;
            this.nam = nam;
            
           validate();
       }
        private void validate() {
              // check linh tinh ko  thoả mãn thì ném
              throw new DateException("lỗi, cần phải nhập đúng ngày, tháng, năm");
        }
}

public class SinhVien {
       private SvDate svdate;
       // xxx
       public void setDate(SvDate date) { this.svdate = date; }
}


....

		try {
			System.out.println("Nhap ngay sinh");
			int ngay = new Scanner(System.in).nextInt();
			System.out.println("Nhap thang");
			int thang = new Scanner(System.in).nextInt();
			System.out.println("Nhap nam");
			int nam = new Scanner(System.in).nextInt();
			sva.setDate(ngay, thang, nam);
		} catch (DateException e) {
			System.out.println(e.getMessage());
		} catch (InputMismatchException e) {
			System.out.println("Loi, moi nhap lai");
		}
Bài liên quan
0