Java基础复习第五天,数组定义(静态、动态初始化),数组储存机制及数组的反转、排序、遍历

一 数组定义和访问

1.案例引入:

  如果需要定义多个变量,那么我们建议使用容器,一次性保存多个数据,统一操作。

2.容器:

  是将多个数据存储到一起,每个数据称为该容器的元素。

3.Java中容器: 数组,集合

 数组:是一个长度固定的容器,而且容器中的元素的数据类型要一致

4.数组的三种定义方式

     //格式一:(静态初始化)
        int[] arr1=new int[]{1,2,3};//int arr1[]=new int[]{1,2,3} 效果一样的
     //格式二:简化版(静态初始化)
        int[] arr2={1,2,3};
     //格式三:动态初始化
        int[] arr3=new int[3];

二 数组原理内存图

1.什么是内存

		程序运行时,所占的那部分空间,断电丢失

2.Java的内存五大区

		栈区(stack):	保存局部变量(我们目前学的所有变量,都在这个区)
		堆区(heap):	保存对象(也就是new出来东西)
		方法区(method area): 保存.class文件
		本地方法区(native):和操作系统有关
		程序计数器区/寄存区:和CPU相关

3.数组的内存图(见下图)

		a.单个数组的内存图

		b.两个或多个数组的内存图

		c.两个数组名指向同一个数组的内存图

在这里插入图片描述在这里插入图片描述
tip:“同居原理”即:两个数组同用一个相同的地址,其中一方数组的元素发生改变,另一方 也同时发生改变(两个人共用一张白纸,一个人画完后,另一个人再拿这张纸还是白的吗?)
4.数组的常见异常

   1.数组越界异常(ArrayIndexOutOfBoundsException)
	 访问了不存在的索引的元素
   2.空指针异常(NullPointerException)
     数组名中的地址清空后,继续访问数组的某个元素

三.Arrays类

常用的两个方法

   String s = Arrays.toString(数组);//把数组中每个元素取出,拼接一个完整的字符串给你
   Arrays.sort(数组);//把数组中元素进行升序排序

	排序数组:
		如果是数值类型,按照值的大小升序排序
		如果是字符类型,按照字符的ASCII码值升序排序
		如果是字符串类型,按照字符串的首字母升序排序,首字母一样按照第二个字母升序排序,...

四.练习

1.数组获取最大值元素

	求出数组中最大的那个元素
        //1.数组
        int[] nums = {32,54,3,754,6,13,4,53,6,34,645,7,568};
        //2.求数组的最大值
        //定义一个擂主变量
        int max = nums[0];
        //依次取出每个元素(遍历),不要第一个
        for(int i = 1;i < nums.length;i++) {
            //选手元素 nums[i]
            if (max < nums[i]) {
                max = nums[i]; //选手 大于 擂主 那么选手要成为新的擂主
            }
        }
        //所有元素都比较完毕之后,max中保存的就是最大值
        //3.打印
        System.out.println("最大值是:"+max);

2.数组反转

    //数组反转方法一:
    //重新定义新数组,令a数组的首个索引等于b数组的最后索引
    private static void Arrays2() {
        int[] arrs = {1, 2, 3, 4, 5, 6, 7};
        int[] arrs2 = new int[arrs.length];
        for (int i = 0; i < arrs.length; i++) {
            arrs2[arrs.length - i - 1] = arrs[i]; //arrs和arrs2数组长度一致,都为7,所以arrs[首]+arrs2[末]=数组长度-1,
                                                  //即(arrs)[0]+(arrs2)[6]=7-1   (arrs)[1]+(arrs2)[5]=7-1
        }
        for (int a : arrs2) {
            System.out.println(a);
        }
    }

    //数组反转方法二:指针索引交换
    private static void Arrays3() {
        int arr[] = {1, 2, 3, 4, 5};
        int maxOfIndex = arr.length - 1;
        int minOfIndex = 0;
     //while循环
        while (maxOfIndex > minOfIndex) {  //当最大索引<=最小索引时停止

            int temp = arr[maxOfIndex];
            arr[maxOfIndex] = arr[minOfIndex];
            arr[minOfIndex] = temp;

            maxOfIndex--;
            minOfIndex++;
        }
         /*
        for循环遍历

        for (int maxOfIndex=arr.length-1,minOfIndex=0;maxOfIndex>minOfIndex; minOfIndex++, maxOfIndex-- ) {
            int temp=arr[maxOfIndex];
            arr[maxOfIndex]=arr[minOfIndex];
            arr[minOfIndex]=temp;

        }*/

        //增强for遍历
        for (int foreach : arr) {
            System.out.println(foreach);
        }

        //   Arrays.toString 工具类Arrays可直接打印
        System.out.println(Arrays.toString(arr));

    }

3. 求数组平均值

  private static void No2(){
        //求数组平均值,要求保留一位小数
        int[] arr1={1,2,3,4,5};
        int sum=0;
        for (int num:arr1){
            sum+=num;
        }
        System.out.println(sum);
        int i = sum / arr1.length;
        Double avg = Double.valueOf(i); //这里Double是double的包装类,等复习到的时候再说
        double avg2=i;                  //类型转换:范围小——>范围大  无需强转
        System.out.println(avg);
        System.out.println(avg2);

    }

4.利用数组打印扑克牌

//这里没有大小王,等复习到集合的时候用集合做“斗地主”游戏比较方便
private static void No5(){
     String[] color={"♣","♠","♦","♥"};
     String[] number={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        for (int i = 0; i < color.length; i++) {
            for (int i1 = 0; i1 < number.length; i1++) {
                System.out.print(color[i]+number[i1]+"\t");
            }
            System.out.println();
        }
    }

5.判断数组是否对称

 private static String arrIsOrNotSymmetry(int[] arr){
        int max=arr.length-1;
        int min=0;
        for (int i = 0; i < arr.length; i++) {
          if(arr[min]==arr[max]){
              max--;
              min++;
          }else{
              return "不对称";
          }
          //有没有这个if的效果是一样的,因为数组本身对称
          if(max<=min){
              break;
          }
        }
       return "对称";
    }

6.数组排序

   //最简单的方法,利用Arrays工具类
        int[] arr={1,8,6,3,5};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
   //这里Arrays.sort()只能正序排序,想倒叙就在搞下上面的数组反转(⊙⊙)!

冒泡排序、插入排序什么的单独整一篇

猜你喜欢

转载自blog.csdn.net/weixin_41229776/article/details/83999688