JavaSE学习记录-整数逆序+数组删除元素

数组定义方法

int[] arr = new int[10];

定义同时进行赋值:

int[] arr = new int[]{1,2,3,4,5};

数组打印方法 

1.for循环打印

for(int i=0;i<arr.length;i++){
    System.out.print(arr[i]);
}

2.foreach打印

for(int value:arr){
    System.out.print(value);
}

3.Arrays自带函数打印

System.out.print(Arrays.toString(arr));

示例:

    int[] arr = new int[10];
    Arrays.fill(arr,2,6,1);
    System.out.print(Arrays.toString(arr));

 

 数组填充

Arrays自带fill方法进行填充,可以往数组中用指定值根据指定指标进行填充。

    public static void fill(int[] a, int fromIndex, int toIndex, int val) {
        rangeCheck(a.length, fromIndex, toIndex);
        for (int i = fromIndex; i < toIndex; i++)
            a[i] = val;
    }

 

实例练习

任务一:获取整数位数,并逆序打印输出,包含正负整数情况。

任务二:手动录入数组大小及元素,输入删除位置,对指定位置元素进行删除,并进行数组缩容。 

import java.util.*;
/**
 * Created on 2020/9/6.
 *
 * @author:resumebb
 * @Description:
 */
public class Reverse {
    //获取位数函数
    public static int getLength(int num){
        int count = 0;

        while(num!=0){
            num/=10;
            count++;
        }
        return count;
    }

    //逆序打印函数
    public static int reversePrint(int num,int count){
        System.out.println("原数:"+num);
        System.out.print("逆序输出:");
        //负数情况
        if(num<0){
            System.out.print(num % 10);
            num/=10;
            for(int i=1;i<count;i++) {
                System.out.print(Math.abs(num % 10));
                num/=10;
            }
            return 1;
        }
        //正数含0情况
        else {
            for (int i = 0; i < count; i++) {
                System.out.print(num % 10);
                num /= 10;
            }
            return 1;
        }


    }

    //删除指定位置元素,进行缩容
    public static int[] delElement(int[] arr,int delPos){
        int len = arr.length;
        //删除操作
        for(int i=delPos;i<len;i++){
            arr[i]=arr[++i];
        }
         //数组缩容
        arr = Arrays.copyOf(arr, arr.length-1);
        return arr;
    }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        //获取位数+逆序输出
//        int num = in.nextInt();
//        int len = getLength(num);
//        System.out.println("位数:"+len);
//        reversePrint(num,len);

        //删除数组元素
        int delPos =0;
        System.out.println("数组大小:");
        int arrLen = in.nextInt();
        int[] arr = new int[arrLen];
        int length = arr.length;
        int[] newArr = new int[arrLen-1];

        for (int i=0;i<arrLen;i++){
            arr[i]=in.nextInt();
        }

        //删除指定位置元素
        System.out.println("原数组:"+Arrays.toString(arr)+" 数组大小:"+arr.length);
        System.out.println("输入删除位置:");
        delPos = in.nextInt();
        if(delPos<0||delPos>length){
            System.out.print("删除位置错误,重新输入");
        }else{
            arr=delElement(arr,delPos);
            System.out.println("删除后:"+Arrays.toString(arr)+" 数组大小:"+arr.length);
        }

        in.close();
    }
}

 

 

对于其中Arrays的copyOf数组复制函数,源码如下:

  public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

 通过System调用copyOf函数,两个形参,一个原始数组,一个要扩容或缩容的数组新的长度,根据新长度定义一个新数组,利用System调用arraycopy函数进行复制,在长度选择方面利用min函数取原数组长度和新数组长度之间较小值,若是新长度大,原长度小,它就只能复制原数组那么多元素,反之复制新长度那么多元素即可,所以其实主要还是arraycopy起作用,copyOf仅是调用arraycopy封装的一个简易函数,应用范围较小。

对于arraycopy函数,源码中如下定义:

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

五个参数,src为Object类型的原始数组,srcPos为copy的起始位置,如0,1,dest为Object类型的复制目标数组,destPos为目标数组准备复制的起始位置,length为复制原数组的长度,大小应该在0到src.length之间。

二者的区别在于Arrays的copy函数其实是System的copy函数的一个封装调用,它会在调用的同时创建一个新数组,而System的copy函数只是复制一个数组。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值