Day15

    科技2022-08-16  119

    多维数组

    多维数组可以看成是数组的数组,比如你可以二维数组就是一特殊的一维数组,其每一个 元素都一个一维数组二维数组语法 int a [][]=new int [2][5]; 解析:上述的二维数组啊可以看成一个两个长度为五的一维数组组成的数组 package Arrays; /** * @author java小白松 */ public class ArraysDome06 { public static void main(String[] args) { int[][] arrays = {{1, 3, 45, 56, 677}, {23, 45, 6, 7, 46}, {1, 2, 34, 65, 3}}; System.out.println(arrays[0][4]); printArray(arrays[0]); printArray(arrays[1]); System.out.println(); System.out.println(arrays.length); System.out.println(arrays[0].length); for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { System.out.print(arrays[i][j]+" "); } } } public static void printArray(int[] arrays) { for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i] + " "); }//打印的数组 } }

    Arrays类

    数组的工具类Java.util.Arrays由于数组对象本身并没有方法可以供我们调用,但API中提供了一个工具类Arrays供给我们使用,从而可以对数据对象进行一些基本的操作查看JDK帮助文档Arrays类中的方法都是static修饰的静态方法, 在使用的时候可以直接使用类名进行调用,而不能 使用对象来调用具有以下常用功能 给数组赋值:通过fill方法。对数组排序:通过sort方法。按照升序对比数组:通过equals方法比较数组中的元素值是否相等查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M1Zhqwrj-1601888086840)(C:\Users\黄松松\AppData\Roaming\Typora\typora-user-images\image-20201003105357660.png)]

    在idea中要查看一个能直接使用的类就直接ctrl加鼠标左键

    package Arrays; import java.lang.reflect.Array; import java.util.Arrays; /** * @author java小白松 */ public class ArraysDome07 { public static void main(String[] args) { int[] a = {74, 34, 52, 5, 52, 56, 43}; System.out.println(Arrays .toString(a)); printArrays(a); System.out.println(a);//[I@1d44bcfa存放数组的地址 Arrays.sort(a);//自动排序 Arrays.fill(a ,2,4,000);//自动填充 System.out.println( ); System.out.println(Arrays.toString(a)); } public static void printArrays(int [] a){ for (int i = 0; i < a.length; i++) { if(i==0){ System.out.print("["); } if (i==a.length-1){ System.out.print(a[i]+"]"); } } } }

    冒泡排序

    冒泡排序是最为出名的排序算法之一,共有八大排序

    冒泡的代码还是相当简单,两层循环外层冒泡轮数,里层依次比较,程序 员江湖中人尽皆知

    这个算法的时间复杂度o(n2);

    package Arrays; import java.lang.reflect.Array; import java.util.Arrays; /** * @author java小白松 */ public class ArraysDome08 { public static void main(String[] args) { int [] a={102,3,4,25,535,4}; int [] sort= sort(a); System.out.println(Arrays.toString(sort)); } public static int[] sort(int [] arrays){ boolean flag=false;// 用来判断数组是否为有序的如果有序的就停止排序 for (int i = 0; i < arrays.length-1; i++) { for (int j=0;j<arrays.length-1-i;j++){ int c; if(arrays[j+1]<arrays[j]){ c=arrays[j]; arrays[j]=arrays[j+1]; arrays[j+1]=c; flag=true; } } if (flag==false){ break; } } return arrays; } } /**冒泡排序 * 每一次对相邻的两个数进行比较,如果第一个数大于第二个数他们两个就交换位置 * 每一次都能找最大或者最小值 * 下一轮少一次排序 * */

    稀疏数组

    需求:编写五子棋优先中,有存盘退出和续上盘的功能

    分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数组

    解决:稀疏数组

    稀疏数组的介绍

    当一个数组中大部分元素为0,或者为同一直的数组时,可以使用稀疏数组来保存该数组稀疏数组的出理方法是:

    记录数组一共有几行几列,有多少不同值

    把具有不同值的元素和行列级及值在一个小规模的数组中,从而缩小程序的规模

    左边是原始数组,右边数稀疏数组

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fPG8XiY-1601888086841)(C:\Users\黄松松\AppData\Roaming\Typora\typora-user-images\image-20201005155956622.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRN1yFQU-1601888086843)(C:\Users\黄松松\AppData\Roaming\Typora\typora-user-images\image-20201005160038699.png)]

    package Arrays; import java.util.Arrays; /** * @author java小白松 */ public class ArraysDome09 { public static void main(String[] args) { // 1.创建一个二维数组11*11,0:没有棋子,1:有黑棋子 // 2有白棋子 int[][] arrays = new int[11][11]; arrays[1][2] = 1; arrays[2][3] = 2; //输出原始的数组 System.out.println("输出原始的数组"); for (int[] ints : arrays) {//这个是把二维数组转化为一维数组 for (int anInt : ints) {//这个是用来输出所有的一维数组 System.out.print(anInt + "\t"); } System.out.println(); } //转化为稀疏数组 //获取有效值的个数 System.out.println("================="); int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (arrays[i][j] != 0) { sum++; } } } System.out.println("有效值的个数" + sum); //创建一个稀疏数组的数组 int[][] arrays2 = new int[sum + 1][3]; arrays2[0][0] = 11; arrays2[0][1] = 11; arrays2[0][2] = sum; //遍历二维数组,将非零的元素,存放在稀疏数组中 int count=0; for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { if(arrays[i][j]!=0){ count++; arrays2[count][0]=i; arrays2[count][1]=j; arrays2[count][2]=arrays[i][j]; } } } System.out.println("输出稀疏数组"); for (int i = 0; i < arrays2.length; i++) { System.out.println(arrays2[i][0]+"\t" +arrays2[i][1]+"\t" +arrays2[i][2]+"\t"); } System.out.println("================="); System.out.println("还原稀疏数组"); //读取稀疏数组 int [][] arrays3=new int[arrays2[0][0]][arrays2[0][1]]; //给其中的元素还原值 for (int i = 1; i < arrays2.length; i++) { arrays3[arrays2[i][0]][arrays2[i][1]]=arrays[i][2]; } //打印原来的数组 for (int[] ints : arrays3 ) {//这个是把二维数组转化为一维数组 for (int anInt : ints) {//这个是用来输出所有的一维数组 System.out.print(anInt + "\t"); } System.out.println(); } } }

    } //打印原来的数组 for (int[] ints : arrays3 ) {//这个是把二维数组转化为一维数组 for (int anInt : ints) {//这个是用来输出所有的一维数组 System.out.print(anInt + “\t”); } System.out.println(); } } }

    ***反复看稀疏数组***
    Processed: 0.012, SQL: 9