java日常练习题day01

1.猜字母游戏

  • 1.随机生成5个字母 -> 字符数组
  • 2.用户猜字母 -> 控制台猜 -> 字符数组
  • 3.两个字符数组比较 , 字母正确个数,位置正确个数
  • 4.用户猜不对,重复 2 和 3
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;

            }

        }
    }
}

你可能感兴趣的:(javaSE)