今天是周日,明天又是周一了。整个周末的状态就是,不想学习,不想过周一,感觉上班不知道干什么,非常难受。哎,那日子也得过啊。就这样,洗个澡睡觉,明天又是礼拜一,又是学习的一天了。

package homework;

import java.util.Random;
import java.util.Scanner;

/**
 * 1. 生成一个长度是3的随机字符串,把这个字符串作为当做密码
 *
 * 2. 使用穷举法生成长度是3个字符串,匹配上述生成的密码
 *
 * 要求: 分别使用多层for循环 和 递归解决上述问题
 */
public class Test {
    public static boolean found = false;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int length = in.nextInt();
        String password = getString(length);
        matchVersion1(password);
        char[] guessPassword = new char[password.length()];
        generatePassword(guessPassword,password);

    }

    private static String getString(int length) {
        Random random = new Random();
        String string = "";
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(3);
            int result = 0;
            switch (number) {
                //case0是输出数字
                case 0:
                    result = (int) (Math.random() * 10 + 48);
                    char s = (char) result;
                    string += s;
                    break;
                //case1是输出小写字母
                case 1:
                    result = (int) (Math.random() * 26 + 97);
                    char s1 = (char) result;
                    string += s1;
                    break;
                case 2:
                    result = (int) (Math.random() * 26 + 65);
                    char s2 = (char) result;
                    string += s2;
                    break;
                default:
                    break;
            }
        }
        return string;
    }

    //利用三层for循环嵌套的方法暴力破解
    private static void matchVersion1(String password) {
        char[] guessPassword = password.toCharArray();
        double startTime = System.currentTimeMillis();
        outloop:
        for (int i = '0'; i <= 'z'; i++) {
            for (int j = '0'; j <= 'z'; j++) {
                for (int k = '0'; k <= 'z'; k++) {
                    if (!isLetterOrDigit(i, j, k)) {
                        continue;
                    }
                    guessPassword[0] = (char) i;
                    guessPassword[1] = (char) j;
                    guessPassword[2] = (char) k;
                    String guess = new String(guessPassword);
                    if (guess.equals(password)) {
                        double spentTime = (System.currentTimeMillis() - startTime);
                        System.out.println("找到了,密码是" + guess +" 花费时间:"+spentTime);
                        break outloop;
                    }
                }
            }
        }
    }

    private static boolean isLetterOrDigit(int i, int j, int k) {
        return Character.isLetterOrDigit(i) &&
                Character.isLetterOrDigit(j) &&
                Character.isLetterOrDigit(k);
    }
    //使用递归的方法暴力破解(未完全掌握),周日晚上思考后已经掌握
    private static void matchVersion2(char[] guessPassword, int index, String password) {
//        if(found)
//            return;
        for (int i = '0'; i <= 'z'; i++) {
            char c = (char) i;
            if (!Character.isLetterOrDigit(c)) {
                continue;
            }
            guessPassword[index] = c;
            if (index != guessPassword.length - 1) {
                matchVersion2(guessPassword, index + 1, password);
            } 
            else {
                String guess = new String(guessPassword);
                if (guess.equals(password)) {
                    System.out.println("找到了,密码是" + guess);
                    found = true;
                }
            }
            if (found){
                break;
            }
        }
    }
    private static void generatePassword(char[] guessPassword,String password){
        matchVersion2(guessPassword,0,password);
    }
}

package homework;


import java.util.Date;
/**
 * 借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期
 */
public class Test {
    public static void main(String[] args) {
        //创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期
        Date dateStart = new Date(95,0,1,0,0,0);
        Date dateEnd = new Date(95,11,31,23,59,59);
        System.out.println("开始时间:"+dateStart);
        System.out.println("最终时间:"+dateEnd);

        long startTime = dateStart.getTime();
        long endTime = dateEnd.getTime();

        long randomTime = (long) ((Math.random() * (endTime - startTime)) + startTime);
        Date randomDate = new Date(randomTime);
        System.out.println("取开始到最终时间的随机时间为:"+randomDate);

    }
}
package homework;
/**
 * 找出下个月的倒数第3天是哪天
 */
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class Test {
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println("当前日期为 "+sdf.format(date));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH,2);
        calendar.set(Calendar.DATE, 1);
        calendar.add(Calendar.DATE, -3);
        System.out.println(sdf.format(calendar.getTime()));
    }
}