2021-10-22学习Java Day05

复制数组10.20

把一个数的值,复制到另一个数组中

System.arraycopy(src,srcPos,dest,destPos,lengh)

src:源数组

srcPos:从源数组复制数据的起始位置

dest:目标数组

destPos:复制到目标数组的起始位置

length:复制的长度

package operator;

public class Demo02 {
    public static void main(String[] args) {
        int a [] = new int[]{15,61,85,68,45,8,9};
        int b [] = new int[3];  //只给出了长度为3的空间,没有赋值
        //方法一:使用for循环 b[i] = a[i];
        // 默认的长度是b数组的3个长度空间
        for (int i = 0; i < b.length; i++){
            b[i] = a[i];
        }

        //方法二:System.arraycopy(src, srcPos, dest, destPos, length)
        //src:      源数组
        //srcPos:   从源数组复制数据的起始位置
        //dest:     目标数组
        //destPos:  复制到目标数组的起始位置
        //length:   复制的长度空间

        System.arraycopy(a, 0, b, 0, 3);

        //打印内容
        for (int i = 0; i < b.length; i++){
            System.out.println(b[i] + " ");
        }
    }
}

练习-合并数组

准备两个数组,长度都是5-10之前的随机数,并使用随机数初始化该两个数组

然后准备第三个数组,第三个数组的长度空间是前两个数组的和

通过System.arraycopy把前两个数组合并到第三个数组中

package operator;

public class Demo02 {
    public static void main(String[] args) {
        //练习-合并两个数组到第三个
        int [] a = new int[(int) (Math.random()*5) + 5];
        int [] b = new int[(int) (Math.random()*5) + 5];
        int [] c = new int[a.length + b.length];    //令c数组的长度为a和b的长度空间

        //a数组
        System.out.println("数组a的内容:");
        for (int i = 0; i < a.length; i++){
            a[i] = (int) (Math.random() *100);  //前面学习的Math随机
            System.out.println(a[i] + " ");
        }
        System.out.println();

        //b数组
        System.out.println("数组b的内容:");
        for (int i = 0; i < b.length; i++){
            b[i] = (int) (Math.random() *100);
            System.out.println(b[i] + " ");
        }
        System.out.println();

        //c数组
        System.arraycopy(a, 0, c, 0, a.length);
        System.arraycopy(b, 0, c, a.length, b.length);
      //destPos 目标数组的
        // 起始位置是a数组的长度a.length
        //length 长度空间是b数组的b.length

        System.out.println("合并后的数组是:");
        for (int x : c){
            System.out.println(x + " ");
        }
    }
}

二维数组

int a[] = new int[]{1,2,3,4,5};	//这是一个数组,里面的元素都是一个基本类型int
int b[][] = new int[][]{
  {1,2,3},
  {4,5,6},
  {7,8,9}
};
//这是一个二维数组,里面的每一个元素,都是一个一堆数组,所以二维数组又叫数组的数组
package operator;

public class Demo01 {
  //数组命名区别
    public static void main(String[] args) {
        //初始化二维数组
        int [][] a = new int[2][3]; //有两个一维数组,每个一维数组的长度是3
        a[1][2] = 5;    //可以直接访问一堆数组,一维已经分配了空间

        //只分配了二维数组
        int[][] b = new int[2][];   //有两个一堆数组,每个一维数组的长度未分配
        b[0] = new int[3];  //必须事先分配长度,才可以访问
        b[0][2] = 5;

        //指定内容的同时,分配空间
        int [][] c = new int[][]{
                {1,2,4},
                {4,5},
                {6,8,9,7}
        };
    }
}

练习:定义一个5X5的二维数组。然后使用随机数填充该二维数组。找出该二维数组里最大的值,并打印出现在二维坐标。

0-100随机整数的获取方法,参考方法之一:

(int) (Math.random()*100)	//Math.random()会得到一个0-1之间的随机浮点数,然后乘以100,并强转为整数
package operator;

public class Demo01 {
    public static void main(String[] args) {
        //练习: 遍历二维数组并找出最大值及下标
        int[][] array = new int[5][5];
        int max = 0;
        int c = 1;
        int x=0,y=0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                array[i][j] = (int) (Math.random()*100+1);
                if (array[i][j] > max) {
                    max = array[i][j];
                    x = i;
                    y = j;
                }
                if (array[i][j]<10) {
                    System.out.print("0"+array[i][j]+" ");
                }else {
                    System.out.print(array[i][j]+" ");
                }
                if (c%5 == 0) {
                    System.out.println();
                }
                c++;
            }
        }
        System.out.println("最大值:"+ max + "\n坐标是:("+x+","+y+")");
    }
}

数组Arrays

Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能。 大大提高了开发人员的工作效率。

关键字简介
copyOfRange数组复制
toString()转换为字符串
sort排序
binarySearch搜索
equals判断是否相同
fill填充

代码示例

数组复制: copyOfRange

package bese;

import java.util.Arrays;
	//Arrays提供了一个copyOfRange方法进行数组复制,不同于System.arraycopy 需要准备好目标数组,并分配长度。
 	//copyOfRange 只需要源数组就可以,通过返回值
	//注意:copyOfRange的3个参数,如下显示,表示的意思及结束的位置是无法取到的。

public class Demo02 {
    public static void main(String[] args) {
      int a[] = new int[]{18,62,66,86,53,8};

              //使用copyOfRange(int[] original,int from, int to)
              // 第一个参数标识源数组
              // 第二个参数表示开始位置(可以取得到)
              // 第三个参数表示结束位置(取不到)
        int[] b = Arrays.copyOfRange(a,0,3);

      for (int i = 0; i < b.length; i++){
          System.out.println(b[i] + " ");
      }
    }
}
/***
 * ░░░░░░░░░░░░░░░░░░░░░░░░▄░░
 * ░░░░░░░░░▐█░░░░░░░░░░░▄▀▒▌░
 * ░░░░░░░░▐▀▒█░░░░░░░░▄▀▒▒▒▐
 * ░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐
 * ░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐
 * ░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌
 * ░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒
 * ░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐
 * ░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄
 * ░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒
 * ▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒
 * 单身狗就这样默默地看着你,一句话也不说。
 */

转换为字符串: toString()

package bese;

import java.util.Arrays;

public class Demo03 {
    public static void main(String[] args) {
        //之前学习的,需要打印一个数组的内容是通过for循环遍历,逐一打印
        //Arrays 提供了toString(),直接把一个数组转换为字符串,然后再打印

       int a[] = new int[]{18,16,85,15,42,6};
       String content = Arrays.toString(a); //soString转字符串,content内容
        System.out.println(content);    //打印内容
    }
}
/*
╭⌒╮¤      ` 
╭╭ ⌒╮ ●╭○╮  
╰ ----╯/█∨█\  
~~~~~~~~~~∏~~∏~~~~~~~~~~~
 */

排序

package bese;

import java.util.Arrays;

public class Demo02 {
    public static void main(String[] args) {
        //前面学习使用的是选择法和冒泡法
        //这里使用的是Arrays工具类提供的sort排序
        
        int a[] = new int[]{11,18,66,68,52,8};
        System.out.println("排序前:");
        System.out.println(Arrays.toString(a)); //打印数组a,转字符串打印
        Arrays.sort(a);  //sort进行排序,顺序是从小到大
        System.out.println("排序后:");
        System.out.println(Arrays.toString(a));
    }
}

搜索

package bese;

import java.util.Arrays;
    //查询元素出现的位置
    //使用binarySearch查找前,必须要先使用sort进行排序
    //数组中有多个相同的元素,查找结果是不确定的
public class Demo03 {
    public static void main(String[] args) {
       int a[] = new int[]{18,16,85,15,42,6};

       Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        //使用binarySearch前,必须先使用sor排序
        System.out.println("数字 85出现的位置:" + Arrays.binarySearch(a,85));
    }
}

判断是否相同

package bese;

import java.util.Arrays;
    //比较2个数组的内容是否一致
    //第二个数组的第2个元素8,和第一个不一样,所以比较结果是false
public class Demo02 {
    public static void main(String[] args) {
        int a[] = new int[]{11,18,66,68,52,8};
        int b[] = new int[]{11,8,66,68,52,8};

        System.out.println(Arrays.equals(a,b));     //判断不相同返回值 false
    }
}

填充

package bese;

import java.util.Arrays;

public class Demo03 {
    public static void main(String[] args) {
        //使用同一个值填充数组,使用比较少

        int a[] = new int[10];

        Arrays.fill(a,5);   //填充到a数组,值5

        System.out.println(Arrays.toString(a));
    }
}
/*
╭⌒╮¤      `
╭╭ ⌒╮ ●╭○╮ 
╰ ----╯/█∨█\  
~~~~~~~~~~∏~~∏~~~~~~~~~~~
 */

————————————————

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值