第三章_数组-Day07-《Java学习知识库》

admin 2025-11-02 00:58:18 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 1、昨日复习
  • 2、数组中涉及的常见算法
    • 2.1 数组元素的赋值
    • 2.2 求数值型数组中元素的最大值、最小值、平均值、总和等
    • 2.3 数组的复制、反转、查找(线性查找、二分法查找)
    • 2.4 数组元素的排序算法
  • 3、Arrays工具类的使用
  • 4、数组的总结

    1、昨日复习

    1.写出一维数组初始化的两种方式int[] arr = new int[5];//动态初始化

    String[] arr1 = new String[]{“Tom”,”Jerry”,”Jim”};//静态初始化

    数组一旦初始化,其长度就是确定的。arr.length数组长度一旦确定,就不可修改。


    2.写出二维数组初始化的两种方式int[][] arr = new int[4][3];//动态初始化1int[][] arr1 = new int[4][];//动态初始化2

    int[][] arr2 = new int[][]{{1,2,3},{4,5,6},{7,8}};//静态初始化


    3.如何遍历如下的二维数组int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};

    for(int i = 0;i < arr.length;i++){ for(int j = 0;j < arr[i].length;j++){ System.out.print(arr[i][j] + “\t”); } System.out.println();}


    4.不同类型的一维数组元素的默认初始化值各是多少整型 : 0浮点型:0.0char:0boolean :false引用类型:null


    5.一维数组的内存解析:String[] strs = new String[5];strs[2] = “Tom”;strs = new String[3];


    了解即可数据结构:1、数据与数据之间的逻辑关系:集合、一对一、一对多、多对多2、数据的存储结构:线性表:顺序表(比如:数组)、链表、栈、队列树形结构:二叉树图形结构:

    算法:排序算法:搜索算法:


    1. 使用二维数组打印一个 10 行杨辉三角。 【提示】
    2. 1. 第一行有 1 个元素, 第 n 行有 n 个元素
    3. 2. 每一行的第一个元素和最后一个元素都是 1
    4. 3. 从第三行开始, 对于非第一个元素和最后一个元
    5. 素的元素。即:
    6. yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
    7. package com.atguigu.java;
    8. public class Practice {
    9. public static void main(String[] args) {
    10. int[][] yangHui = new int[10][];
    11. for (int i = 0; i < yangHui.length; i++) {
    12. yangHui[i] = new int[i + 1];
    13. for (int j = 0; j < i + 1; j++) {
    14. if (j == 0) {
    15. yangHui[i][j] = 1;
    16. } else if (j == i) {
    17. yangHui[i][j] = 1;
    18. } else if (i >= 2 && j != 0 && j != i) {
    19. yangHui[i][j] = yangHui[i - 1][j - 1] + yangHui[i - 1][j];
    20. } else {
    21. continue;
    22. }
    23. }
    24. }
    25. for (int i = 0; i < yangHui.length; i++) {
    26. for (int j = 0; j < yangHui[i].length; j++) {
    27. System.out.print(yangHui[i][j] + "\t");
    28. }
    29. System.out.println();
    30. }
    31. }
    32. }
    33. //我的代码
    1. package com.atguigu.java;
    2. public class Practice2 {
    3. public static void main(String[] args) {
    4. // 1、声明并初始化二维数组
    5. int[][] yangHui = new int[10][];
    6. // 2、给数组元素赋值
    7. for (int i = 0; i < yangHui.length; i++) {
    8. yangHui[i] = new int[i + 1];
    9. // 2.1给首末元素赋值
    10. yangHui[i][0] = yangHui[i][i] = 1;
    11. // 2.2给每行的非首末元素赋值
    12. if (i > 1) {//if可去掉
    13. for (int j = 1; j < yangHui[i].length - 1; j++) {
    14. yangHui[i][j] = yangHui[i - 1][j - 1] + yangHui[i - 1][j];
    15. }
    16. }
    17. }
    18. // 3、遍历二维数组
    19. for (int i = 0; i < yangHui.length; i++) {
    20. for (int j = 0; j < yangHui[i].length; j++) {
    21. System.out.print(yangHui[i][j] + " ");
    22. }
    23. System.out.println();
    24. }
    25. }
    26. }
    27. //老师写的

    2、数组中涉及的常见算法

    2.1 数组元素的赋值

    1. 【拓展之笔试题】
    2. 创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值。同时,要求
    3. 元素的值各不相同。
    4. package com.atguigu.java;
    5. import java.util.Random;
    6. /*
    7. * 【拓展之笔试题】
    8. 创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值。同时,要求
    9. 元素的值各不相同。
    10. */
    11. public class Practice3 {
    12. public static void main(String[] args) {
    13. // 1、创建数组
    14. int[] arr = new int[6];
    15. int number = 0;
    16. // 2、赋值
    17. // 2.1赋值并判断
    18. for (int i = 0; i < arr.length; i++) {
    19. number = (int) (Math.random() * 30 + 1);
    20. if(i >0){
    21. for(int j=0;j<i;j++){
    22. if(arr[j]==number){
    23. i--;
    24. break;
    25. }else{
    26. arr[i] =number;
    27. }
    28. }
    29. } else{
    30. arr[i] =number;
    31. }
    32. }
    33. // 3、遍历
    34. for (int i1 = 0; i1 < arr.length; i1++) {
    35. System.out.println(arr[i1]);
    36. }
    37. }
    38. }
    39. //我写的
    1. int[] arr = new int[6];
    2. for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31)
    3. arr[i] = (int) (Math.random() * 30) + 1;
    4. for (int j = 0; j < i; j++) {
    5. if (arr[i] == arr[j]) {
    6. i--;
    7. break;
    8. }
    9. }
    10. }
    11. for (int i = 0; i < arr.length; i++) {
    12. System.out.println(arr[i]);
    13. }
    14. }
    15. }
    16. //老师的

    2.2 求数值型数组中元素的最大值、最小值、平均值、总和等

    1. package com.atguigu.java;
    2. /*
    3. 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,
    4. 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
    5. 要求:所有随机数都是两位数。
    6. */
    7. public class Practice4 {
    8. public static void main(String[] args) {
    9. //1 定义一个int型的一维数组,包含10个元素
    10. int[] arr = new int[10];
    11. //2 分别赋一些随机整数,
    12. for (int i = 0; i < 10; i++) {
    13. arr[i] = (int) (Math.random() * 90 + 10);
    14. }
    15. for(int i=0;i<10;i++){
    16. System.out.print(arr[i]+" ");
    17. }
    18. System.out.println();
    19. //3 求出所有元素的最大值,最小值,和值,平均值,并输出出来。
    20. //3.1 最大值
    21. int max=0;
    22. for(int i=0;i<10;i++){
    23. if(arr[i]>max){
    24. max=arr[i];
    25. }
    26. }
    27. System.out.println("最大值是:"+max);
    28. //3.2 最小值
    29. int min=0;
    30. for(int i=0;i<10;i++){
    31. if(arr[i]<min){
    32. min=arr[i];
    33. }
    34. }
    35. System.out.println("最小值是:"+min);
    36. //3.3 和值,平均值
    37. int sum=0;
    38. int avage=0;
    39. for(int i=0;i<10;i++){
    40. sum+=arr[i];
    41. }
    42. avage=sum/10;
    43. System.out.println("和值是:"+sum+",平均值是:"+avage);
    44. }
    45. }

    2.3 数组的复制、反转、查找(线性查找、二分法查找)

    1. package com.atguigu.java;
    2. /*
    3. * 使用简单数组
    4. (1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,
    5. 他们是int[]类型的数组。
    6. (2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。
    7. (3)显示array1的内容。
    8. (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值
    9. (如array[0]=0,array[2]=2)。打印出array1。
    10. */
    11. public class Practice5 {
    12. public static void main(String[] args) {
    13. int[] array1 = new int[]{2,3,5,7,11,13,17,19};
    14. int[] array2;
    15. for(int i=0;i<array1.length;i++){
    16. System.out.print(array1[i]+" ");
    17. }
    18. System.out.println();
    19. array2=array1;
    20. for(int i=0;i<array2.length;i++){
    21. if(i%2==0){
    22. array2[i]=i;
    23. }
    24. }
    25. for(int i=0;i<array1.length;i++){
    26. System.out.print(array1[i]+" ");
    27. }
    28. }
    29. }
    30. 思考:array1和array2是什么关系?array1和array2地址值一样
    31. 拓展:修改题目,实现array2对array1数组的复制

    QQ截图20211206165223.png

    1. //查找
    2. //线性查找:
    3. //二分法查找:要求此数组必须是有序的。

    2.4 数组元素的排序算法

    排序:假设含有n个记录的序列为{R1,R2,…,Rn},其相应的关键字序列为 {K1,K2,…,Kn}。将这些记录重新排序为{Ri1,Ri2,…,Rin},使得相应的关键 字值满足条Ki1<=Ki2<=…<=Kin,这样的一种操作称为排序。 通常来说,排序的目的是快速查找。衡量排序算法的优劣: 1.时间复杂度:分析关键字的比较次数和记录的移动次数 2.空间复杂度:分析排序算法中需要多少辅助内存 3.稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。排序算法分类:内部排序和外部排序。 内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排序操作都在内存中完成。 外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助 于外部存储器(如磁盘)。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。

    QQ截图20211207141537.png要求:知道有十种,冒泡排序和快速排序必须要会手写,堆排序和归并排序了解思想QQ截图20211207142118.png

    1. package com.atguigu.java;
    2. public class Practice7 {
    3. public static void main(String[] args) {
    4. int[] arr = new int[] { 43, 32, 76, -98, 0, 64, 33, -21, 32, 99 };
    5. // 冒泡排序
    6. for (int i = 0; i < arr.length - 1; i++) {
    7. for (int j = 0; j < arr.length - i - 1; j++) {
    8. if(arr[j]>arr[i]){
    9. int temp=arr[j];
    10. arr[j]=arr[j+1];
    11. arr[j+1]=temp;
    12. }
    13. }
    14. }
    15. for (int i = 0; i < arr.length; i++) {
    16. System.out.print(arr[i] + "\t");
    17. }
    18. }
    19. }

    附录:尚硅谷宋红康排序算法.pdf

    3、Arrays工具类的使用

    QQ截图20211207151007.pngQQ截图20211207152207.png

    4、数组的总结

    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  11