作业代码:

  1. package com.qfedu.day03;
  2. import java.util.Scanner;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/3 9:26
  7. * @Version 1.0
  8. *
  9. * 这几天的编程难点:
  10. * 1、如何使用变量
  11. * 2、方法如何定义 有没有参数,有几个参数,什么类型,需不需要返回值,以及返回值类型写什么比较合适
  12. *
  13. *
  14. * java基础:
  15. * 变量
  16. * if-else
  17. * for while
  18. * 会定义方法
  19. * 各种常用类的方法 String Math Random Scanner
  20. * 集合(List,Set,Map)
  21. */
  22. public class HomeWork01 {
  23. /**
  24. * 第二道题目:
  25. * 编程题:
  26. * 编写一个应用程序,当用户输入一串字符后,将大写转换为小写,
  27. * 将小写转换为大写,并统计出该字符串中大写字母多少个,小写字母多少个?
  28. * 比如用户依次输入: A b d D E d f c G .....
  29. * 依次循环获取用户输入的值,然后大写变小写,并打印用户输入了多少个大写字母,多少个小写字母。
  30. *
  31. * String 中的两个重要的方法:
  32. * charAt(下标) 从字符串中的特定位置获取一个char
  33. * toCharArray() 将一个字符串变为一个字符数组。
  34. */
  35. public static void second(){
  36. Scanner scanner = new Scanner(System.in);
  37. System.out.println("请输入多个字母,以空格隔开,以.结束:");
  38. // ZhangSan
  39. int bigCount = 0,smallCount = 0;
  40. String ziMu = "-1" ;
  41. while(!ziMu.equals(".")) { // api
  42. ziMu = scanner.next(); // "A"
  43. System.out.println(ziMu);
  44. char c = ziMu.charAt(0);// 'A'
  45. if (c >= 'A' && c <= 'Z') {
  46. c += 32;
  47. bigCount++;
  48. } else if (c >= 'a' && c <= 'z') {
  49. c -= 32;
  50. smallCount++;
  51. }
  52. System.out.print(c + "\t");
  53. }
  54. System.out.println("本地大写的字母有:"+bigCount+"个,小写有"+smallCount+"个");
  55. }
  56. public static void second2(){
  57. Scanner scanner = new Scanner(System.in);
  58. System.out.println("请输入一个字符串:");
  59. // ZhangSan
  60. int bigCount = 0,smallCount = 0;
  61. String str = scanner.nextLine(); // "A"
  62. char[] chars = str.toCharArray(); // A b C D
  63. // ['A',' ','b'.....]
  64. for (int i = 0; i < chars.length; i++) {
  65. char c = chars[i]; // 'A'
  66. if (c >= 'A' && c <= 'Z') {
  67. c += 32;
  68. bigCount++;
  69. } else if (c >= 'a' && c <= 'z') {
  70. c -= 32;
  71. smallCount++;
  72. }
  73. System.out.print(c + "\t");
  74. }
  75. System.out.println("本地大写的字母有:"+bigCount+"个,小写有"+smallCount+"个");
  76. }
  77. public static void main(String[] args) {
  78. //second();
  79. second2();
  80. }
  81. }
  1. package com.qfedu.day03;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/3 10:03
  6. * @Version 1.0
  7. *
  8. * 打印如下:
  9. * ABCDE
  10. * BCDEF
  11. * CDEFG
  12. * DEFGH
  13. * EFGHI
  14. */
  15. public class HomeWork02 {
  16. public static void main(String[] args) {
  17. for (int i = 0; i < 5; i++) {
  18. // 负责打印空格
  19. for (int j = 0; j < i; j++) {
  20. System.out.print(" ");
  21. }
  22. for (int j = 0; j < 5; j++) {
  23. System.out.print((char) (j+i+65));
  24. }
  25. System.out.println();
  26. }
  27. }
  28. }

一、数组

1、概念
数组就是一个容器,可以存储一串相同类型的数据。
2、定义

  1. package com.qfedu.day03_02;
  2. import java.util.Arrays;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/3 10:18
  7. * @Version 1.0
  8. */
  9. public class Demo01 {
  10. public static void main(String[] args) {
  11. // int[] 这样的数组的数据类型是引用数据类型,跟String,Student都是一样的
  12. // 数据类型除了8大基本数据类外都是引用。
  13. int[] arr = null; // int类型的数组只能存放int类型的数据
  14. double[] arr2 = null;
  15. System.out.println(arr2);
  16. int[] arr3 = new int[5];
  17. String[] arr4 =new String[5];
  18. System.out.println(arr3);
  19. System.out.println(arr3.toString());
  20. System.out.println(Arrays.toString(arr3));
  21. System.out.println(Arrays.toString(arr4));// ctrl + d
  22. int[] arr5 = {1,2,3,59};
  23. // 是上面写法的复杂写法,不建议
  24. int[] arr6 = new int[]{1,2,3,59};
  25. System.out.println(Arrays.toString(arr5));
  26. }
  27. }

3、数组在jvm内存模型中的示意图
image.png
4、遍历数组

  1. package com.qfedu.day03_02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/3 11:10
  6. * @Version 1.0
  7. */
  8. public class Demo02 {
  9. public static void main(String[] args) {
  10. int[] arr = {1,3,5,9,10};
  11. System.out.println(arr[4]);// [下标] 下标从0开始的
  12. System.out.println(arr.length);// 可以获取数组的长度
  13. //System.out.println(arr[5]);
  14. /*
  15. 最普通的循环方式
  16. */
  17. for (int i = 0; i < arr.length; i++) {
  18. System.out.println(arr[i]);
  19. }
  20. /**
  21. * 针对数组或者集合,for循环出了一个增强版
  22. * 可以非常方便的遍历数组,但是如果你还需要使用到了数组中的下标,该方式不适应。
  23. */
  24. for (int suibian : arr) { // 从arr数组中依次拿出一个值,赋值给suibian这个变量
  25. System.out.println(suibian);
  26. }
  27. }
  28. }

小心数组下标越界
image.png

5、查找数组
普通查找:

  1. package com.qfedu.day03_03;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/3 14:25
  6. * @Version 1.0
  7. */
  8. public class Demo01 {
  9. // 查询 10 是否在数组 arr 中,如果有返回其 下标,如果没有 -1
  10. public static int searchElement(int[] arr, int num){
  11. for (int i = 0; i < arr.length; i++) {
  12. if(arr[i] == num){
  13. return i;
  14. }
  15. }
  16. return -1;
  17. }
  18. public static void main(String[] args) {
  19. int[] arr = {10,8,5,12,19};
  20. System.out.println(searchElement(arr, 5));
  21. }
  22. }

二分查找:

  1. package com.qfedu.day03_03;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/3 14:34
  6. * @Version 1.0
  7. */
  8. public class Demo02 {
  9. /**
  10. * 二分查找
  11. * 1、必须有序 不管是升序还是降序
  12. * 2、效率比较高
  13. *
  14. * @param args
  15. */
  16. public static void main(String[] args) {
  17. //int[] arr = {1,2,3,4,5,6,7};
  18. int[] arr = {1,2,3,4,5,6,7,9};
  19. System.out.println(binarySearch(arr, 10));
  20. }
  21. // {1,2,3,4,5,6,7} 10
  22. public static int binarySearch(int[] arr,int num){
  23. int middleIndex = arr.length / 2;
  24. int start= 0,end = arr.length -1;
  25. while(start <= end){
  26. if(arr[middleIndex] > num){
  27. end = middleIndex - 1;
  28. middleIndex = (start + end ) / 2 ;
  29. }
  30. if(arr[middleIndex] < num){
  31. start = middleIndex + 1;
  32. middleIndex = (start + end ) / 2 ;
  33. }
  34. if(arr[middleIndex] == num){
  35. return middleIndex;
  36. }
  37. }
  38. return -1;
  39. }
  40. }

6、Arrays工具类的用法

  1. package com.qfedu.day03_03;
  2. import java.util.Arrays;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/3 14:57
  7. * @Version 1.0
  8. *
  9. * Arrays 工具类,专门用来处理数组的工具类
  10. * 里面提供了大量的关于数组的 方法
  11. * copyOf(int[] array, int newLength) 从原数组中拷贝指定数量的元素,到一个新的数组中,并返回这个新的数组
  12. *
  13. * copyOfRange(int[] array, int from, int to) 从原数组中拷贝指定范围 [from, to) 的元素,到一个新的数组中,并返回这个新的数组
  14. *
  15. * equals(int[] array1, int[] array2) 判断两个数组是否相同
  16. *
  17. * fill(int[] array, int element) 使用指定的数据,填充数组
  18. *
  19. * sort(int[] array) 对数组进行排序(升序)
  20. *
  21. * binarySearch(int[] array, int element) 使用二分查找法,到数组中查询指定的元素出现的下标
  22. *
  23. * toString(int[] array) 将数组中的元素拼接成字符串返回
  24. */
  25. public class Demo03 {
  26. public static void main(String[] args) {
  27. int[] arr ={10,8,12,9,32};
  28. Arrays.sort(arr);
  29. System.out.println(Arrays.toString(arr));
  30. int num = Arrays.binarySearch(arr, 7);
  31. System.out.println(num!=-1 ? "查找到了":"不存在");
  32. // 从一个老的数组中拷贝一份给新数组,如果新数组长度比老数组大,用默认值填充
  33. int[] ints = Arrays.copyOf(arr, 10);
  34. System.out.println(Arrays.toString(ints));
  35. int[] arr2 ={10,8,12,9,32};
  36. int[] arr3 ={10,8,12,9,32};
  37. System.out.println(Arrays.equals(arr3,arr2));// 比较的是两个数组的内容
  38. System.out.println(arr2 == arr3); // 比较的是内存地址
  39. System.out.println(arr2.equals(arr3));// 比较的是内存地址
  40. int[] arr4 = Arrays.copyOfRange(arr3,1,arr3.length);
  41. System.out.println(Arrays.toString(arr4));
  42. // 使用默认值更改里面所有的元素
  43. Arrays.fill(arr3,100);
  44. int[] arr5 = new int[100];
  45. Arrays.fill(arr5,5);
  46. System.out.println(Arrays.toString(arr3));
  47. }
  48. }

7、可变长参数的用法

  1. package com.qfedu.day03_03;
  2. import java.util.Arrays;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/3 15:50
  7. * @Version 1.0
  8. */
  9. public class Demo04 {
  10. public static void show(String name,int ... nums){
  11. System.out.println(name);
  12. System.out.println(nums);
  13. System.out.println(Arrays.toString(nums));
  14. for (int i:nums) {
  15. System.out.println(i);
  16. }
  17. System.out.println(nums.length);
  18. }
  19. /*
  20. 可变长参数,只能放在参数列表的最后一位,操作起来跟数组一样。
  21. public static void show(int ... nums,String name){
  22. System.out.println(name);
  23. System.out.println(nums);
  24. System.out.println(Arrays.toString(nums));
  25. for (int i:nums) {
  26. System.out.println(i);
  27. }
  28. System.out.println(nums.length);
  29. }*/
  30. public static void main(String[] args) {
  31. System.out.printf("你的年龄是%d,你的身高是%d",18,210);
  32. show("zhangsan",1,3,5,10);
  33. }
  34. }

8、排序
八大排序算法
1)选择排序
选择排序:固定值与其他值依次比较大小,互换位置。
image.png

  1. package com.qfedu.day03_03;
  2. import java.util.Arrays;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/3 16:10
  7. * @Version 1.0
  8. *
  9. * 选择排序: 先固定一个位置,然后依次与后面的值比较,如果大于后者小于后者,就交换位置。 // 拿到最大值或者最小值
  10. * 第一轮交换完成之后,固定下一个位置,以后与后年的值比较
  11. */
  12. public class Demo05 {
  13. public static void main(String[] args) {
  14. int[] arr = {10,8,6,14,19};
  15. for(int m = 0;m < arr.length;m++){
  16. for(int n=m; n< arr.length;n++){
  17. if(arr[m]>arr[n]){
  18. arr[m]= arr[m] ^ arr[n];
  19. arr[n]= arr[m] ^ arr[n];
  20. arr[m]= arr[m] ^ arr[n];
  21. }
  22. }
  23. }
  24. System.out.println(Arrays.toString(arr));
  25. }
  26. }

2) 冒泡排序
冒泡排序:相邻的两个数值比较大小,互换位置
image.png

  1. package com.qfedu.day03_03;
  2. import java.util.Arrays;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/3 16:25
  7. * @Version 1.0
  8. */
  9. public class Demo06 {
  10. public static void main(String[] args) {
  11. int[] arr = {10,9,7,5};
  12. int num = arr.length;
  13. for(num=arr.length;num > 1;num--){
  14. for(int m=0;m< num -1 ;m++){
  15. if(arr[m]>arr[m+1]){
  16. arr[m]= arr[m] ^ arr[m+1];
  17. arr[m+1]= arr[m] ^ arr[m+1];
  18. arr[m]= arr[m] ^ arr[m+1];
  19. }
  20. }
  21. System.out.println(Arrays.toString(arr));
  22. }
  23. }
  24. }
package com.qfedu.day03_03;

import java.util.Arrays;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/3 16:25
 * @Version 1.0
 */
public class Demo06 {
    public static void main(String[] args) {

        int[] arr = {10,9,7,5};
        int num = arr.length;
        while(num > 1){
            num--;
            for(int m=0;m<num;m++){
                if(arr[m]>arr[m+1]){
                    arr[m]= arr[m] ^ arr[m+1];
                    arr[m+1]= arr[m] ^ arr[m+1];
                    arr[m]= arr[m] ^ arr[m+1];
                }
            }
            System.out.println(Arrays.toString(arr));
        }


    }
}
/**
 * @Author 千锋大数据教学团队
 * @Company 千锋好程序员大数据
 * @Description 冒泡排序
 */
public class Test {
    public static void main(String[] args) {
        // 实例化一个数组
        int[] array = { 1, 2, 3, 4, 5 };
        // 冒泡排序
        sort(array);
    }
    /**
     * 使用冒泡排序进行升序排序
     * @param array 需要排序的数组
     */
    public static void sort(int[] array) {
        // 1. 确定要进行多少趟的比较
        for (int i = 0; i < array.length - 1; i++) {
            // 2. 每趟比较,从第0位开始,依次比较两个相邻的元素
            for (int j = 0; j < array.length - 1 - i; j++) {
                // 3. 比较两个相邻的元素
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }
}

9、递归
所谓递归:方法自己调用自己,在某个时刻退出。
1) 使用递归计算数的阶乘。
4!= 4 3 2 1
4! = 4
3!
1! = 1

package com.qfedu.day03_04;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/3 16:35
 * @Version 1.0
 */
public class Demo01 {

    /**
     * 给定一个值,求这个值的阶乘
     *
     *   4!= 4 * (4-1)!
     *   num! = num * (num-1)!
     * @param num
     * @return
     */
    public static int getJieCheng(int num){
        if(num == 1){
            return 1;
        }
        return  num * getJieCheng(num-1);
    }


    public static void main(String[] args) {

        System.out.println(getJieCheng(4));
    }
}

2、求斐波那契数列中的某个数

package com.qfedu.day03_04;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/3 16:42
 * @Version 1.0
 */
public class Demo02 {

    public static int getFeiBo(int index){
        // 10    第9个+第8个
        if(index == 1 || index == 2){
            return 1;
        }
        return getFeiBo(index-1)+getFeiBo(index-2);
    }
    //  求斐波那契数列中的某个数
    public static void main(String[] args) {
        System.out.println(getFeiBo(10));
    }
}

10、时间复杂度(了解)