Khi mình nhập sai số (không nằm trong khoảng 1000 - 2023) thì không in ra dòng lỗi nhập lại. Chỉ khi nhập văn bản mới xuất hiện thông báo lỗi. Các bạn giúp mình sửa phần này trong cấu trúc try-catch nhé.
// Program
package JavaOop;
import java.time.Duration;
import java.time.LocalDate;
import java.util.Scanner;
public class ThoiGian {
private int ngay, thang, nam, thu;
private boolean laNamNhuan = true;
private Scanner sc = new Scanner(System.in);
public int getNgay() {
return ngay;
}
public void setNgay(int ngay) {
this.ngay = ngay;
}
public int layThu() {
LocalDate date = LocalDate.of(nam, thang, ngay);
int thu = date.getDayOfWeek().getValue();
return thu + 1;
}
public int getThang() {
return thang;
}
public void setThang(int thang) {
this.thang = thang;
}
public int getNam() {
return nam;
}
public void setNam(int nam) {
this.nam = nam;
if (this.nam % 4 == 0 && this.nam % 100 != 0 || this.nam % 400 == 0) {
laNamNhuan = true;
} else {
laNamNhuan = false;
}
}
public int getThu() {
return thu;
}
public boolean isLaNamNhuan() {
return laNamNhuan;
}
private int nhapLieu(String nhap, String loi, int min, int max) {
boolean right = true;
int number = 0;
do {
try {
System.out.println(nhap);
number = sc.nextInt();
right = number >= min && number <= max;
} catch (Exception e) {
right = false;
System.out.println(loi);
sc.nextLine();
}
} while (!right);
return number;
}
public ThoiGian(int nam, int thang, int ngay) {
setNam(nam);
setThang(thang);
setNgay(ngay);
}
public ThoiGian() {
LocalDate now = LocalDate.now();
setNam(nhapLieu("Nhập năm: ", "Nhập không hợp lệ, nhập lại", 1000, now.getYear()));
setThang(nhapLieu("Nhập tháng: ", "Nhập không hợp lệ, nhập lại", 1, 12));
if (thang == 2) {
if (laNamNhuan) {
setNgay(nhapLieu("Nhập ngày: ", "Nhập không hợp lệ, nhập lại", 1, 29));
} else {
setNgay(nhapLieu("Nhập ngày: ", "Nhập không hợp lệ, nhập lại", 1, 28));
}
} else if (thang == 4 || thang == 6 || thang == 9 || thang == 11) {
setNgay(nhapLieu("Nhập ngày: ", "Nhập không hợp lệ, nhập lại", 1, 30));
}
setNgay(nhapLieu("Nhập ngày: ", "Nhập không hợp lệ, nhập lại", 1, 31));
}
public static long layKhoangThoiGian(ThoiGian time1, ThoiGian time2) {
LocalDate date1 = LocalDate.of(time1.nam, time1.thang, time1.ngay);
LocalDate date2 = LocalDate.of(time2.nam, time2.thang, time2.ngay);
long duration = Duration.between(date1.atStartOfDay(), date2.atStartOfDay()).toDays();
return duration;
}
public void printInfo() {
System.out.println("Thứ " + layThu() + " ngày " + ngay + "/" + thang + "/" + nam + ", là năm nhuận " + laNamNhuan);
}
}
//Main
package JavaOop;
public class Main {
public static void main(String[] args) {
ThoiGian time1 = new ThoiGian();
ThoiGian time2 = new ThoiGian(2023,10,14);
time1.printInfo();
System.out.println(Math.abs(ThoiGian.layKhoangThoiGian(time1,time2)) + " ngày");
}
}