1.猜字母游戏
package day04.game;
import java.util.Arrays;
import java.util.Scanner;
/*
* 1.随机生成5个字母 -> 字符数组
* 2.用户猜字母 -> 控制台猜 -> 字符数组
* 3.两个字符数组比较 , 字母正确个数,位置正确个数
* 4.用户猜不对,重复 2 和 3
*/
public class GuessGame01Demo {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
//1.随机生成5个字母
char[] charArr = randomChars();
System.out.println(Arrays.toString(charArr));
//4.用户猜不对,重复 2 和 3
while(true) {
//2.用户猜字母
System.out.println("请输入:");
String str = console.next();
char[] guess = parseChars(str);
//3. 比较 charArr 和 guess 字符数组
int[] res = compare(charArr,guess);
System.out.print("字母正确个数:" + res[0]);
System.out.println("位置正确个数:" + res[1]);
//5.全猜对
if(res[1] == 5) {
System.out.println("全对了!");
break;
}
}
}
/*
* 目的: 比较两个字符数组
*/
public static int[] compare(char[] answer, char[] guess) {
// result[0]表示 字母正确 result[1]表示 位置正确
int[] result = new int[2];
for(int i = 0; i < answer.length; i++) {
for(int j = 0; j < guess.length; j++) {
//判断字母正确个数
if(answer[i] == guess[j]) {
//如果字母正确 + 1
result[0]++;
//判断位置正确个数
if(i == j) {
//如果位置正确 + 1
result[1]++;
}
}
}
}
return result;
}
/*
* 目的: 为了把字符串转换成字符数组
*/
public static char[] parseChars(String str) {
char[] charArr = new char[5];
for(int i = 0; i < charArr.length; i++) {
charArr[i]= str.charAt(i);
}
return charArr;
}
/*
* 目的: 为了得到长度为5的随机字符数组
*/
public static char[] randomChars() {
char[] chars = new char[5];
for(int i = 0; i < chars.length; i++) {
chars[i] = (char)(Math.random() * 26 + 'A');
for(int j = 0; j < i; j++) {
//判断 i位置上的字符 和 i位置之前的所有字符相比较
if(chars[j] == chars[i]) {
i--;//回到原来位置上重新随机生成字符
break;//如果相同,就结束
}
}
}
return chars;
}
}
常用API - 都是类
Scanner
nextInt()
nextDoble()
next(): 获取字符串,遇到空格或者回车结束
nextLine():获取一行字符串,遇到回车结束
System
print(): 打印,不换行
println() 换行打印
Math
Math.random(): 获得[0,1)的随机值
Math.pow(double d1, double d2): 获得d1 的d2次幂
String
str.charAt(index); 获得index索引对应的字符
Arrays
Arrays.toString():读取数组
Arrays.sort():数组的排序
数组的排序
选择排序: 每一轮都会选出一个最大的,放在最后面
冒泡排序: 每一轮都比较相邻的两个元素,小的放前面,大的放后面
插入排序: 把数组分成两部分, 前一部分已经排好的, 另一部分挨个访问,把访问到的元素插入到前一部分的合适的位置
1234 8590
冒泡排序原理分析:
数组:[9, 7, 3, 6, 1] length = 5
i: int i = 0; i < length - 1; i++
j: int j = 0; j < length - 1 - i; j++
第一轮: i = 0 arr[j] > arr[j+1]
7, 9, 3, 6, 1 j = 0 arr[0] arr[1] 交换
7, 3, 9, 6, 1 j = 1 arr[1] arr[2]
7, 3, 6, 9, 1 j = 2 arr[2] arr[3]
7, 3, 6, 1, 9 j = 3 arr[3] arr[4]
第二轮: i = 1
3, 7, 6, 1, 9 j = 0
3, 6, 7, 1, 9 j = 1
3, 6, 1, 7, 9 j = 2
第三轮: i = 2
3, 6, 1, 7, 9 j = 0
3, 1, 6, 7, 9 j = 1
第四轮: i = 3
1, 3, 6, 7, 9 j = 0
package day04;
import java.util.Arrays;
/*冒泡排序*/
public class Bubble {
public static void main(String[] args) {
int [] arr=new int[]{9,7,3,6,1};
int[] arrs=bubblesort(arr);
System.out.println(Arrays.toString(arrs));
}
public static int[] bubblesort(int [] arr){
for (int i = 0; i <arr.length-1 ; i++) {
for (int j = 0; j <arr.length-1-i ; j++) {
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
}
选择排序: 每一轮都会选出一个最大的,放在最后面
数组:[9, 7, 3, 6, 1] length = 5
第一轮: 1, 7, 3, 6, 9
int index = 0;
1: 比较 arr[1] 和 arr[index] ,记录下标最大值 index = 0
2: 比较 arr[2] 和 arr[index],如果arr[2]大进行替换,记录下标最大值 index = 0
3: 比较 arr[3] 和 arr[index],如果arr[3]大进行替换,记录下标最大值 index = 0
4: 比较 arr[4] 和 arr[index],如果arr[4]大进行替换,记录下标最大值 index = 0
index 和当前最后一位(length - 1)进行交换
i:0
j: 1 ~ 4
第二轮: 1, 6, 3, 7, 9
1: 比较arr[0] 和 arr[1] ,记录下标最大值 index = 1
2: 比较 arr[2] 和 arr[index],如果arr[2]大进行替换,记录下标最大值 index = 1
3: 比较 arr[3] 和 arr[index],如果arr[3]大进行替换,记录下标最大值 index = 1
index 和 当前最后一位(length -1 -1)进行交换
i: 1
j: 1 ~ 3
第三轮: 1, 3, 6, 7, 9
1: 比较arr[0] 和 arr[1] ,记录下标最大值 index = 1
2: 比较 arr[2] 和 arr[index],如果arr[2]大进行替换,记录下标最大值 index = 1
index 和 当前最后一位(length -1 -2) 进行交换
i: 2
j: 1 ~ 2
第四轮: 1, 3, 6, 7, 9
1: 比较arr[0] 和 arr[1] ,记录下标最大值 index = 1
index 和 当前最后一位(length -1 -3)进行交换
i: 3
j: 1
i: int i = 0; i < legth - 1; i++
j: int j = 1; j < length - i; j++
当前最后一位:length - 1 -i
package day04;
import java.util.Arrays;
/*选择排序*/
public class Select {
public static void main(String[] args) {
int[] arr={9,7,3,8,1};
selectSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void selectSort(int[] arr){
for (int i = 0; i <arr.length-1 ; i++) {
int index=0;
for (int j = 1; j <arr.length-i ; j++) {
if (arr[j]>arr[index]){
index=j;//把j赋值给index
}
//交换位置
int temp=arr[index];
arr[index]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
}
}
}