数组经典练习题,超配合教程的练习(二)

目录

 数组赋值机制1

练习1:

要求:n2 的变化,不会影响到n1的值(这个练习的下一条练习题,刚与此相反)

 数组赋值机制2

练习1 :

先看看没有被影响之前的代码:

练习2:

要求:下面通过代码输出 ,arr 2 的变化会影响到 arr1

数组拷贝:编写代码,实现数组拷贝(内容复制)

练习1:

要求:将int[] arr1={10,20,30};拷贝到arr2数组

数组反转

练习1:通过找规律进行反转

要求:把数组的元素内容反转

使用逆序赋值方式

练习1:

要求:使用逆序给一个元素赋值

 练习2:

要求: 实现动态的给数组添加元素效果,实现对数组扩容。


 数组赋值机制1

基本数据类型赋值,这个值就是具体的数据,而且相互不影响。

练习1:

基本数据类型赋值,赋值方式为值拷贝

要求:n2 的变化,不会影响到n1的值(这个练习的下一条练习题,刚与此相反)

        int n1=10;
        int n2=n1;

        n2=80;
        System.out.println("n1="+n1);
        System.out.println("n2="+n2);

结果:

 数组赋值机制2

数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值,是一个地址,arr2变化会影响到arr1

练习1 :

先看看没有被影响之前的代码:

代码实现:

        int[] arr1 = {1, 2, 3};
        int[] arr2 = arr1;//把arr1赋给arr2
       //arr2[0] = 10;
        //看看arr1的值
        System.out.println("====arr1的元素======");
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }

结果:

练习2:

要求:下面通过代码输出 ,arr 2 的变化会影响到 arr1

代码实现:

        int[] arr1 = {1, 2, 3};
        int[] arr2 = arr1;//把arr1赋给arr2
        arr2[0] = 10;
        //看看arr1的值
        System.out.println("====arr1的元素======");
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
        System.out.println("======arr2的元素======");
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }

结果:

数组拷贝:编写代码,实现数组拷贝(内容复制)

练习1:

要求:将int[] arr1={10,20,30};拷贝到arr2数组

  编程思想:

  创建一个新的数组arr2 ,开辟新的数据空间
  大小 arr1.length;

  遍历arr1 ,把每个元素拷贝到arr2对应的元素位置

代码实现:

        int[] arr1={10,20,30};

        //创建一个新的数组arr2 ,开辟新的数据空间
        //大小 arr1.length;
        int[] arr2=new int[arr1.length];

        //遍历arr1 ,把每个元素拷贝到arr2对应的元素位置
        for (int i=0;i<arr1.length;i++){
            arr2[i]=arr1[i];
        }

        //修改arr2
        arr2[0]=100;
        //输出arr1
        System.out.println("====arr1的元素======");
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
        System.out.println("======arr2的元素======");
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }

结果:

数组反转

练习1:通过找规律进行反转

要求:把数组的元素内容反转

编程思想:
1. 把arr[0]和arr[5] 进行交换{66,22,33,44,55,11}
2. 把arr[1]和arr[4] 进行交换{66,55,33,44,22,11}
3. 把arr[2]和arr[3] 进行交换{66,22,44,33,55,11}
4. 一共要交换3次=arr.length/2
5、 每次交换时,对应的下标是arr[i]和arr[arr.length - 1 - i];

代码实现:

        int[] arr = {11, 22, 33, 44, 55, 66};
        int temp=0;
        int len=arr.length;//计算数组的长度
        for (int i = 0; i < len / 2; i++) {
            temp = arr[len - 1 - i];//保存
            arr[len - 1 - i] = arr[i];
            arr[i] = temp;
        }
        System.out.println("====反转后数组=====");
        for (int i=0;i< arr.length;i++){
            System.out.println(arr[i]+"\t");
        }

结果:

使用逆序赋值方式

练习1:

要求:使用逆序给一个元素赋值

编程思想:

1. 创建一个新的数组 arr2 ,大小 arr.length
2. 逆序遍历arr,将每个元素拷贝到arr2的元素中(顺序拷贝)

3.当for 循环结束后,arr2就是一个逆序的数组{66,55 44, 33,22, 11};
4. 让arr指向arr2数据空间,此时arr原来的数据空间就没有变量引用,就会被当作垃圾,销毁

5. 输出arr

代码实现:

        //定义数组
        int[] arr = {11, 22, 33, 44, 55, 66};
        //使用逆序赋值方式
        //思路
        //1. 创先建一个新的数组 arr2 ,大小 arr.length
        //2. 逆序遍历arr,将每个元素拷贝到arr2的元素中(顺序拷贝)
        int[] arr2=new int[arr.length];
        for (int i=arr.length-1,j=0;i>=0;i--,j++){
            arr2[j]=arr[i];
        }
        //3.当for 循环结束后,arr2就是一个逆序的数组{66,55 44, 33,22, 11};
        //4. 让arr指向arr2数据空间,此时arr原来的数据空间就没有变量引用,就会被当作垃圾,销毁
       arr=arr2;
        System.out.println("====arr的元素情况======");
        //5. 输出arr看看
        for (int i=0;i< arr.length;i++){
            System.out.println(arr[i]+"\t");
        }

结果:

 练习2:

要求: 实现动态的给数组添加元素效果,实现对数组扩容。

1. 原始数组使用静态分配int[] arr ={1,2,3}
2.增加的元素4,直接放在数组的最后arr={1,2,3,4}
3. 用户可以通过如下的方法来决定是否继续添加,添加成功,是否继续?y/n

编程思想:

 1. 定义初始数组int[] arr={1,2,3}
   arr[3]=4  //NO,这样会导致报错,数组越界异常
 2, 定义一个新的数组 int[] arrNew=new int[arr.length+1];
 3, 遍历arr数组,依次将arr的元素拷贝到arrNew数组
 4. 将4赋给 arrNew[arrNew.length-1]=4; 把4赋给arrNew最后一个元素
 5. 让arr指向arrNew;arr=arrNew;那么原来arr数组就被销毁
 6. 创建一个Scanner 可以接受用户输入
 7. 因为用户什么时候退出,不确定,老师使用do……while ——break来控制

代码实现:


       Scanner myScanner = new Scanner(System.in);
        //1、初始化数组
        int[] arr={1,2,3};
        //2、定义一个数组
       do {
           int[] arrNew=new int[arr.length+1];
           //3、遍历arr数组,依次将arr 的元素拷贝到arrNew数组
           for (int i=0;i<arr.length;i++){
               arrNew[i]=arr[i];
           }
           System.out.println("请输入你要添加的元素");
           int addNum=myScanner.nextInt();
           //4、
           arrNew[arrNew.length-1]=addNum;
           //5.
           arr=arrNew;
           //输出arr 看看效果
           System.out.println("=======arr 扩容后元素情况=======");
           for (int i=0;i<arr.length;i++){
               System.out.println(arr[i]+"\t");
           }
           //问用户是否继续
           System.out.println("是否继续添加y/n");
           char key=myScanner.next().charAt(0);
           if (key=='n'){
               break;
           }
       }while (true);
        System.out.println("你退出了添加……");

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值