Java学习-第一部分-第一阶段-第五节:数组、排序和查找 ...

打印 上一主题 下一主题

主题 574|帖子 574|积分 1722

数组、排序和查找

数组

数组介绍

数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数组就是一组数据
数组快速入门
  1. //1. double[]表示是double类型的数组,数组名hens
  2. //2.{3,5,1,3.4,2,50}表示数组的值/元素,依次表示数组的
  3. //第几个元素
  4. //
  5. double[] hens = {3,5,1,3.4,2,50};
  6. //遍历数组得到数组的所有元素的和,使用for
  7. //1.我们可以通过 hens[下标]来访问数组的元素
  8. //下标是从日开始编号的比如第一个元素就是 hens[o]
  9. //第2个元素就是 hens[1],依次类推
  10. //2.通过for就可以循环的访问数组的元素/值
  11. //老师提示:可以通过数组名·length得到数组的大小/长度
  12. System.out.println("数组的长度=" + hens.length);
  13. for( int i = 0; i < 6; i++){
  14.     System.out.println("第"+(i+1)+"个元素的值=" + hens[i]);
  15. }
复制代码
数组的使用

●使用方式1-动态初始化
数组的定义
数据类型数组名=new 数据类型[大小]
int a[]=new int[5];//创建了一个数组,名字a,存放5个int
●使用方式2-动态初始化
√先声明数组
语法:数据类型数组名;也可以数据类型[数组名;
int a[];或者int[] a;
√创建数组
语法:数组名=new数据类型[大小;
a=new int[10];
√案例演示【前面修改即可】
  1. //(2)第2种动态分配方式,先声明数组,再new分配空间
  2. double scores[] ;//声明数组,这时scores是null
  3. scores = new double[5];// 分配内存空间,可以存放数据
复制代码
使用方式3-静态初始化
初始化数组
语法:数据类型 数组名[]={元素值,元素值...)
int a[]={2,5,6,7,8,89,90,34,5,6},如果知道数组有多少元素,具体值上面的用法相当于:
  1. int a[=new int[9];
  2. a[0]=2;a[1]=5;a[2]=6; a[3]=7;a[4]=8;
  3. a[5]=89;a[6]=90;a[7]=34;a[8]=56;
复制代码
√快速入门案例【养鸡场】
  1. double hensl={3.5.1.3.4.2.50];等价
  2. double hens[ = new double[6];
  3. hens[0] = 3; hens[1] = 5; hens[2] = 1; hens[3] = 3.4; hens[4]=2;hens[5] = 50;
复制代码
数组使用注意事项和细节


  • 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  • 数组创建后,如果没有赋值,有默认值int 0, short 0, byte 0, long 0, float 0.0,double 0.0, char \u0000,boolean false,String null
  • 使用数组的步骤1.声明数组并开辟空间2.给数组各个元素赋值3.使用数组
  • 数组的下标是从0开始的。
  • 数组下标必须在指定范围内使用,否则报:下标越界异常,比如 int[] arr=new int[5];则有效下标为0-4
  • 数组属引用类型,数组型数据是对象(object)
数组赋值机制


  • 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
    int n1 = 2; int n2 =n1;
  • 数组在默认情况下是引用传递,赋的值是地址。看一个案例,并分析数组赋值的内存图(重点)。
    int[] arr1 = {1,2,3};
    int[] arr2 = arr1;
  1. //基本数据类型赋值,赋值方式为值拷贝
  2. //n2的变化,不会影响到n1的值
  3. int n1 = 10;
  4. int n2 = n1;
  5. n2 = 80;
  6. System.out.print1n( "n1=" +n1);//10
  7. System.out.print1n( "n2=" + n2);//80
  8. //数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值
  9. //是一个地址, arr2变化会影响到arr1
  10. int[]arr1 = {1,2,3};
  11. int[]arr2 = arr1;//把arr1赋给arr2
  12. arr2[0] = 10;
  13. //看看arr1的值
  14. System.out.println( "====arr1的元素====");for(int i = 0; i < arr1.length; i++){
  15.     System.out.println(arr1[i]);
  16. }
复制代码
JVM内存情况图

数组拷贝

编写代码实现数组拷贝(内容复制)
将int[l] arr1 = {10,20,30};拷贝到arr2数组,要求数据空间是独立的.
  1. int[] arr1 = {10,20,30};
  2. //创建一个新的数组arr2,开辟新的数据空间
  3. //大小arr1.length;
  4. int[] arr2 = new int[arr1.length];
  5. //逼历arr1 ,把每个元素拷贝到arr2对应的位置
  6. for(int i = 0; i < arr1.length; i++){
  7.     arr2[i] = arr1[i];
  8. }
复制代码
数组扩容
  1. Scanner myScanner = new Scanner(System.in);//初始化数组
  2. int[]arr = {1,2,3};
  3. do{
  4.     int[]arrNew = new int[arr.length + 1];
  5.     //遍历arr数组,依次将arr的元素拷贝到arrNew数组
  6.     for(int i =0; i< arr.length; i++){
  7.         arrNew[i] = arr[i];
  8.     }
  9.     System.out.println("请输入你要添加的元素");
  10.     int addNum = myScanner.nextInt();
  11.     //把addNum赋给arrNew最后一个元素
  12.     arrNew[ arrNew.length - 1] = addNum;
  13.     //让arr指向arrNew,
  14.     arr = arrNew;
  15.     //输出arr看看效果
  16.     System.out.println("====arr扩容后元素情况====");
  17.     for(int i = 0; i < arr.length; i++){
  18.         System.out.print(arr[i] + "\t");
  19.     }
  20.     //问用户是//问用户是否继续
  21.     System.out.println("是否继续添加y/n");
  22.     char key = myScanner.next( ).charAt(0);
  23.     if( key =='n'){//如果输入n,就结束
  24.         break;
  25.     }
  26. }while(true);
  27. System.out.println("你退出了添加...");
复制代码
排序

排序是将一群数据,依指定的顺序进行排列的过程。排序的分类:

  • 内部排序:
    指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
  • 外部排序法:
    数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。
冒泡排序法

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
冒泡排序法案例:
下面我们举一个具体的案例来说明冒泡法。我们将五个无序:24,69,80,57,13使用冒泡排序法将其排成一个从小到大的有序数列。
总结冒泡排序特点
1.我们一共有5个元素
2.一共进行了4轮排序,可以看成是外层循环
3.每1轮排序可以确定一个数的位置,比如第1轮排序确定最大数,第2轮排序,确定第2大的数位置,依次类推
4.当进行比较时,如果前面的数大于后面的数,就交换
5.每轮比较在减少4->3->2->4分析思路-→>代码..
查找

●介绍:
在java中,我们常用的查找有两种:
1.顺序查找
2.二分查找【二分法,我们放在算法讲解】
●案例演示:
1.有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】要求:如果找到了,就提示找到,并给出下标值。
  1. //定义一个字符串数组
  2. String[] names = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
  3. Scanner myScanner = new Scanner(System.in);
  4. System.out.println("请输入名字");
  5. String findName = myScanner.next();
  6. //逼历数组,逐一比较,如果有,则提示信息,并退出//这里老师给大家一个编程思想
  7. int index = -1;
  8. for(int i = 0; i < names.length; i++){
  9.     //比较字符串比较equals,如果要找到名字就是当前元素
  10.     if(findName.equals(names[i])){
  11.         System.out.println("恭喜你找到"+ findName);
  12.         System.out.println("下标为 " + i);
  13.         //把i保存到index
  14.         index = i;
  15.         break;//退出
  16.     }
  17. }
  18. if(index == -1){//没有找到
  19.     System.out.println("sorry ,没有找到" + findName);
  20. }
复制代码
2.请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数”。
答案:略
多维数组

多维数组我们只介绍二维数组。
二维数组

●二维数组的应用场景
比如我们开发一个五子棋游戏,棋盘就是需要二维数组来表示。
[code]//1。从定义形式上看int[][]//2.可以这样理解,原来的一维数组的每个元素是一维数组,就构成二维数组int[][ ]arr = { {0,0, 0,0,0,0},               {0,0,1,0,0,0},               {0,2,0,3,0,0},               {0,0,0,0,0,0}};//输出二维图形for(int i = 0; i < arr.length; i++){    //逼历二维数组的每个元秦    //逼历二维数组的每个元素(数组)    //老韩解读    //1. arr表示二维数组的第i+1个元秦比如arr[0]∶二维数组的第一个元秦    //2. arr.length得到对应的每个一维数组的长度    for(int j = 0; j

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表