Java 如何在第二个if块中使用date1的更新值。“显示错误”;无法解析日期1“;

Java 如何在第二个if块中使用date1的更新值。“显示错误”;无法解析日期1“;,java,Java,公开课考试{ public static void check1 (String date) throws ParseException { SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy"); SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd, yyyy"); if(date.matches(&quo

公开课考试{

public static void check1 (String date) throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy"); 
    SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd, yyyy"); 

     if(date.matches("^\\w+.+")) {
        Date date1 = sdf2.parse(date);
    }
    else {
        Date date1 = sdf1.parse(date);
    }
    
    Date current  = new Date(); 
    
    if(date1.compareTo(current)<-1) {
        System.out.println("In Past");
    }
    else {
        System.out.println("Same or future date");
    }
publicstaticvoidcheck1(字符串日期)引发异常{
SimpleDataFormat sdf1=新的SimpleDataFormat(“MM/dd/yyyy”);
SimpleDataFormat sdf2=新的SimpleDataFormat(“MMMM dd,yyyy”);
如果(日期匹配(“^\\w++”){
Date date1=sdf2.parse(日期);
}
否则{
Date date1=sdf1.parse(日期);
}
当前日期=新日期();

如果(date1.compareTo(current)您已在范围中声明了变量,该范围将在您关闭括号时结束,也就是说在此之后该变量不再处于活动状态。您可以做的是将其取出:

public static void check1 (String date) throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy"); 
    SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd, yyyy"); 
    Date date1;
     if(date.matches("^\\w+.+")) {
        date1 = sdf2.parse(date);
    }
    else {
        date1 = sdf1.parse(date);
    }
    
    Date current  = new Date(); 
    
    if(date1.compareTo(current)<-1) {
        System.out.println("In Past");
    }
    else {
        System.out.println("Same or future date");
    }
}
publicstaticvoidcheck1(字符串日期)引发异常{
SimpleDataFormat sdf1=新的SimpleDataFormat(“MM/dd/yyyy”);
SimpleDataFormat sdf2=新的SimpleDataFormat(“MMMM dd,yyyy”);
日期1;
如果(日期匹配(“^\\w++”){
date1=sdf2.parse(日期);
}
否则{
date1=sdf1.parse(日期);
}
当前日期=新日期();

如果(date1.compareTo(current)变量仅在其声明的范围内可见(在其封闭的{和}之间)

您的2个date1变量在if和else块的范围内声明(Date date1)。因此,它们在外部不可见(实际上不存在于这些范围之外)

您需要在以下外部进行申报:

public static void check1(String date) throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy");
    SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd, yyyy");

    Date date1; // <- declare date1 here
    if (date.matches("^\\w+.+")) {
        date1 = sdf2.parse(date);
    } else {
        date1 = sdf1.parse(date);
    }

    Date current = new Date();

    if (date1.compareTo(current) < -1) {
        System.out.println("In Past");
    } else {
        System.out.println("Same or future date");
    }
}
publicstaticvoidcheck1(字符串日期)引发异常{
SimpleDataFormat sdf1=新的SimpleDataFormat(“MM/dd/yyyy”);
SimpleDataFormat sdf2=新的SimpleDataFormat(“MMMM dd,yyyy”);
日期1//