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