实现每日签到是一个比较基础的Java练手项目,下面是一个简单的实现方式:
import java.time.LocalDate;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class SignIn {
private Set<LocalDate> signedDates = new HashSet<>();
public boolean sign(){
LocalDate today = LocalDate.now(); // 获取今天的日期
if(signedDates.contains(today)){ // 如果已经签到,返回false
System.out.println("今天已经签过到了");
return false;
}else{
signedDates.add(today); // 记录今天已签到
System.out.println("签到成功");
return true;
}
}
public void checkSignedDays(){
Object[] dates = signedDates.toArray();
Arrays.sort(dates); // 将日期按照从早到晚的顺序排序
int continuousDays = 0; // 连续签到天数
LocalDate lastDate = null;
for(Object date : dates){
LocalDate currentDate = (LocalDate)date;
if(lastDate == null){
continuousDays = 1;
}else if(currentDate.equals(lastDate.plusDays(1))){
continuousDays ++;
}else{
break;
}
lastDate = currentDate;
}
System.out.println("已连续签到" + continuousDays + "天");
}
public static void main(String[] args) {
SignIn signIn = new SignIn();
signIn.sign(); // 签到
signIn.sign(); // 再次签到,返回false
signIn.checkSignedDays(); // 输出连续签到天数
}
}
在这个例子中,我们使用Java 8的LocalDate
类来表示日期,并且使用了Java的集合框架HashSet
来记录已经签到的日期。sign()
方法用于执行签到操作,并且checkSignedDays()
方法用于查询当前的连续签到天数。在main()
方法中,我们创建了一个SignIn
对象,并且执行了两次签到操作。如果再次签到,会返回false
。最后,我们使用checkSignedDays()
方法查询连续签到天数。