java基础-四种拷贝/可变参数编程/Array类方法

作业1

public class He{
    /*
    1、{1,2,3,4,5,6}
     * 将奇数放在偶数前面     大小顺序不要求
     */
    //方法一:
    public static int[] sum(int[] array1) {
        int[] array2= new int[array1.length];
        int a= 0;
        int b= 0;
        for(int i=0;i<array1.length;i++)
        {
            if(array1[i] % 2 !=0)
            {
                array2[a]=array1[i];
                a++;
            }else
            {
                array2[array1.length-1-b]=array1[i];
                b++;
            }

        }
        return array2;
    }
    //方法二:
    public static int[] sum1(int[] array2) {
        int a= 0;
        int b= 0;
        int i=0;
        while(i<array2.length-1-b) {
            if ((array2[i] % 2 == 0) ){
                a = array2[i];
                array2[i] = array2[array2.length - 1 - b];
                array2[array2.length - 1 - b] = a;
                b++;
            } else {
                i++;
            }
        }
        return array2;
    }
    // 2、一个数组是有序的,给定一个key:数字   有两个数字的和加起来等于key
// 找到这两个数字的下标
    public static void He (int[] array4,int key) {
        Arrays.sort(array4);
        int i =0;
        int a=0;
        for(i=0;i<array4.length;i++){
            for( a=i;a<array4.length;a++){
                if(key==array4[i]+array4[a])
                    System.out.println("两个下标为:"+i+";"+a+";");
            }
        }
    }

    //3、题目:一个整形数组,除了两个数字只出现一次外,
//其他数字都是两次。{1,3,1,2,3,4}    找到这两个数字
    public static void one (int[] array5) {

        int i=1;
        Arrays.sort(array5);
        System.out.print("这两个数字为:");
        while(i<array5.length){
            if(array5[i]!=array5[i-1]){
                System.out.print(array5[i-1]+"  ;");
                i++;
            } else {
                i=i+2;
            }
            if(i==array5.length){
                System.out.print(array5[array5.length-1]+";");
            }
        }
    }
    public static void main(String[] args) {
        int[] array1 = new int[]{6,8,-7,3,0,-1,9,-8};
        System.out.println(Arrays.toString(sum(array1)));
        System.out.println(Arrays.toString(sum1(array1)));
        int key =15;
        He(array1,key);
        int[] array5=new int[]{8,-1,7,1,0,-1,8,7};
        one(array5);
    }
}

作业2:

熟悉Arrays这个类里面的方法:

  • 2.2:如何排序数组并插入某个元素?
  • 2.5:如何搜索数组中的最小值和最大元素?
  • 如何合并两个数组(合并到一个新的数组)?
  • 如何填充数组(一次填充,部分填充)?
  • 2.10:如何删除数组指定元素?
  • 2.11: 如何从数组中查找常见的元素?
import java.util.*;
public class TestArrays {
    //2.2:如何排序数组并插入某个元素?
    public static void copy(int []array1 ,int key) {
        Arrays.sort(array1);
        int [] array2=new int[array1.length+1];
        array2=Arrays.copyOfRange(array1,0,array2.length);
        array2[array2.length-1]=key;
        Arrays.sort(array2);
        System.out.println(Arrays.toString(array2));
    }
     //2.5:如何搜索数组中的最小值和最大元素?
     public static void maxmin(int[] array2) {
        Arrays.sort(array2);
        int Max=array2[array2.length-1];
        int Min=array2[0];
         System.out.println("Max="+Max+"  "+"Min="+Min);
     }
     //如何合并两个数组(合并到一个新的数组)?
     public static void two(int[] array1,int[]array2) {
         int [] array3=new int[array1.length+array2.length];
         System.arraycopy(array1,0,array3,0,array1.length-1);
         System.arraycopy(array2,0,array3,array1.length,array1.length-1);
         System.out.println("新数组为:"+Arrays.toString(array3));
     }
     //如何填充数组(一次填充,部分填充)?
     public static void fill(int val1,int val2) {
         int [] array4= new int[10];
         int [] array5=new  int[10];
         Arrays.fill(array4,val1);
         System.out.println("一次填充:"+Arrays.toString(array4));
         Arrays.fill(array5,0,6,val2);
         System.out.println("部分填充:"+Arrays.toString(array5));
     }
     //2.10:如何删除数组指定元素?
     public static void DeleteData(int[] array5,int key1) {
         Arrays.sort(array5);
         int b=0;
         int a = Arrays.binarySearch(array5, key1);
         if (a < 0) {
             System.out.println("数组中没有要删除的指定元素");
         }
         while (a >= 0) {
             for (int i = a + 1; i < array5.length; i++) {
                 array5[i - 1] = array5[i];
             }
             a = Arrays.binarySearch(array5, key1);
             b++;
         }
         int [] array6=new int[array5.length-b];
         System.out.println("删除指定元素后的数组为:" + Arrays.toString(Arrays.copyOf(array5,array6.length)));
     }

    public static void BinarySreach(int[]array6,int key2) {
        Arrays.sort(array6);
        int a = Arrays.binarySearch(array6, key2);
       if(a<0) {
            System.out.println("数组中没有指定元素");
        }
        else{
            System.out.print("数组中指定元素的角标为:");
            System.out.print(a+";  ");
                for (int i = a + 1; i < array6.length; i++) {
                  if(array6[a]==array6[i]) {
                      System.out.print(i + ";  ");
                      }else{
                      break ;
                  }
                  }
                }
        }

     public static void main(String[] args) {
         int[] array5=new int[]{5,9,6,4,2,8,-1,5};
         Scanner scan= new Scanner(System.in);
         int key1=scan.nextInt();
         int key2=scan.nextInt();
         DeleteData(array5,key1);
         int[] array6=new int[]{5,9,6,4,2,8,-1,5};
         BinarySreach(array6,key2);
         System.out.println();
         int[] array1 = new int[]{5, 9, -6, 4, -1, 6};
         int key = 2;
         copy(array1, key);
         int[] array2 = new int[]{5, 9, -6, 4, -1, 6};
         maxmin(array2);
         two(array1, array2);
         int val1 = 2;
         int val2 = 3;
         fill(val1, val2);

     }
}

四种拷贝;

拷贝方式表达形式是否产生对象深拷贝/浅拷贝java底层表现形式
Arrays.copyOf/Arrays.copyOfRange(array,length)/(array,[from,to))基本:深。引用:浅。用System.arraycopy方法进行copy,可以进行T[](泛型)copy;
System.arraycopy(src,srcPos,dest,destPost,length)/底层是c/c++写的,native表示本地方法
数组名.clone/用System.arraycopy方法进行copy,也是本地方法,object类
for一次for循环/

可变参数编程:数组

public static int sum3(int... array) {   //就是三个点,可以输入数组,也可以输入整型数。
        int sum = 0;
        for(int i : array) {
            sum += i;
        }
        return sum;
    }
    public static void main(String[] args) {
    int[] array = {1,2,3,4,5};
    sum3(1,2,3,4,5);
    sum3(1,2);
    sum3(array);
    sum3(new int[]{1,2,3,4});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值