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