01/10/2018, 14:41
Không thế nhập lại tháng khi nhập sai
Khi mình nhập ngày sai tháng đúng , năm đúng thì cho mình nhập lại
còn mình nhập ngày đúng , tháng sai thì nó báo lỗi
mình tìm mãi ko biết lỗi
import java.util.Scanner;
public class Ngay_Thang_Nam
{
private int ngay, thang , nam ;
public Ngay_Thang_Nam( int NGAY, int THANG , int NAM)
{
this.ngay = NGAY ;
this.thang = THANG ;
this.nam = NAM ;
}
public Ngay_Thang_Nam()
{
this.ngay = 1 ;
this.thang = 1 ;
this.nam = 1 ;
}
public Ngay_Thang_Nam(Ngay_Thang_Nam a)
{
this.ngay = a.ngay ;
this.thang = a.thang ;
this.nam = a.nam ;
}
public boolean HopLe()
{
boolean dk = true;
int dayMax[] = {-1,31,28,31,30,31,30,31,30,31,30,31,30};
if(( nam % 4 ) == 0 &&( nam % 100 ) != 0 && (nam % 400) == 0)
dayMax[2]=29;
if( ngay < 1 || ngay > dayMax[thang] || thang < 1 || thang > 12 || nam < 1)
{
return dk = false ;
}
return dk;
}
public Ngay_Thang_Nam ngayhomsau()
{
Ngay_Thang_Nam d = new Ngay_Thang_Nam(this);
d.ngay++;
if(d.HopLe() == false)
{
d.ngay = 1 ;
d.thang = d.thang + 1 ;
}
if(d.HopLe() == false)
{
d.thang = 1;
d.nam++ ;
}
return d ;
}
public void set1()
{
Scanner sc = new Scanner(System.in);
do
{
System.out.println("Nhap vao ngay ");
ngay = sc.nextInt();
System.out.println("Nhap vao thang ");
thang = sc.nextInt();
System.out.println("Nhap vao nam ");
nam = sc.nextInt();
}
while(HopLe()==false);
}
public void get1()
{
System.out.println(ngay+"/"+thang+"/"+nam);
}
}
Đây là hàm main
public class test_contructor
{
public static void main(String[] args)
{
Ngay_Thang_Nam Date = new Ngay_Thang_Nam();
Date.set1();
Date.get1();
Date = Date.ngayhomsau();
Date.get1();
}
}
Bài liên quan
Nhập sai mà không cho nhập lại thì có lẽ là hàm HopLe() sai logic.
Để dễ dàng check hơn mình nghĩ bạn nên cho thêm data input đúng và sai.
*** Không biết đây là style code của bạn hay là ai hướng dẫn bạn code, nhưng bạn nên tìm hiểu thêm về coding convention của Java, bạn đặt tên class/biến/hàm quá nguy hiểm =))
style code của mình đang sửa dần cảm ơn bạn. còn vấn đề hàm HopLe() Minh hok tìm thấy lỗi
Có phải lỗi ArrayIndexOutOfBoundsException không bác ?
Lần sau hỏi thì bác nói rõ là lỗi gì nhé
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 25
at Ngay_Thang_Nam.HopLe(Ngay_Thang_Nam.java:33)
at Ngay_Thang_Nam.set1(Ngay_Thang_Nam.java:78)
at test_contructor.main(test_contructor.java:7)
đây bác lỗi đây ,
Bây giờ tớ phân tích từ từ cho bác nhé:
Bác có hiểu cái lỗi nó bảo gì không ?
Bạn thấy sai lầm của mình chưa, giả sử tháng = -1 thì dayMax[-1] sẽ ra cái gì
đây là xét điều kiện mà bạn nếu nó sai nó trả về false , nếu tháng ko hợp lệ thì daymax cũng ko hợp lệ
bạn xem kĩ lại đi, không thể nói tháng k hợp lệ thì dayMax cũng k hợp lệ được, vì làm gì có phần tử ở vị trí -1 cho mà get
ok bạn mình sửa được rùi lỗi ở cái để cái tháng chung câu điều kiện thì ko được tách ra một cái điều kiện khác thì ok
chốt lại vấn đề là hãy đọc kỹ lỗi mà nó ném vào mặt mình nhé bạn.
Hãy cảm thấy may mắn vì nó đã ném lỗi ra cho mình =))
sr . được rùi cậu
vấn đề là trong câu điều kiện mình gộp chung thì ko được tách ra thì được
Bạn tách như nào thế, post lên mình xem chút được không ?
thay đổi thành
Thực ra bạn viết ghép cũng được.
Các biểu thức điều kiện sẽ thực hiện từ phải sang trái, nếu gặp cái nào true thì coi như kết quả của cả biểu thức lớn là true luôn -> câu lệnh trong if được thực thi -> những trường hợp sau sẽ không thực hiện nữa.