JavaSE基础篇:数组

创建数组

package com.cl.Array;

public class ArrayDemo01 {
    //变量类型 变量名字 = 变量的值
    //数组类型

    public static void main(String[] args) {
        int[] nums;//1.声明一个数组

        nums=new int[10];//2.创建一个数组,这里面可存放10个int类型的数字
        //相当于int[] nums=new int[10]

        //3.赋值
        nums[0]=1;
        nums[1]=2;
        nums[2]=3;
        nums[3]=4;
        nums[4]=5;
        nums[5]=6;
        nums[6]=7;
        nums[7]=8;
        nums[8]=9;
        nums[9]=10;

        //计算所有元素的和
        int sum=0;
        //获取数组长度: arrays.length
        for (int i = 0; i < nums.length; i++) {
            sum+=nums[i];
        }
        System.out.println("总和为:"+sum);
    }
}

数组的使用

package com.cl.Array;
//数组的使用
public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arrays={1,2,3,4,5};

        //例子1:打印全部的数组元素
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]);
        }
        System.out.println("================");
        //例子2:计算所有元素的和
        int sum=0;
        for (int i = 0; i < arrays.length; i++) {
            sum+=arrays[i];
        }
        System.out.println("sum="+sum);
        System.out.println("================");
        //例子3:查找最大元素
        int max=arrays[0];

        for (int i = 1; i < arrays.length; i++) {
            if (arrays[i]>max){
                max=arrays[i];
            }
        }
        System.out.println("max="+max);

    }
}

数组的初始化

package com.cl.Array;
//三种数组初始化的状态
public class ArrayDemo02 {
    public static void main(String[] args) {
        //静态初始化
        int[] a={1,2,3,4,5,6,7,8};//静态数组初始化
        System.out.println(a[0]);

        //动态初始化,引用类型(除了八大基本类型都是引用类型)
        //数组没有被初始化的,默认都为0
        int[] b=new int[10];
        b[0]=10;
        System.out.println(b[0]);
        System.out.println(b[1]);
    }
}
//小结:长度是确定的,数组一旦被创建,他的大小就不可改变
//      其元素必须是相同类型,不允许出现混合类型
//      数组中的元素可以是任何数据类型,包括基本类型和引用类型
//      数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
//      数组本身就是对象,java中对象是在堆中,因此数组无论保存原始类型还是其他对象类型
//      !!数组对象本身是在堆中

数组反转

package com.cl.Array;
//数组进阶例子(数组反转)
public class ArrayDemo04 {
    public static void main(String[] args) {
        int [] arrays={1,2,3,4,5};

        //JDK1.5以上,取不到下标
        //array代表数组中的元素,arrays代表数组名
        for (int array : arrays) {
            System.out.println(array);
        }
        printArray(arrays);
        System.out.println();
        printArray(reverse(arrays));
    }

    //打印数组元素
    public  static  void  printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+" ");
        }
    }

    //!!!反转数组
    public static int[] reverse(int[] arrays){
        int[] result=new int[arrays.length];

        //反转操作
        for (int i = 0,j=result.length-1; i <arrays.length ; i++,j--) {
            //把main中的数组第一个位置的元素放到result数组的尾部,实现反转操作
            result[j]=arrays[i];
        }
        return result;
    }
}

多维数组

package com.cl.Array;
//数组进阶例子(数组反转)
public class ArrayDemo04 {
    public static void main(String[] args) {
        int [] arrays={1,2,3,4,5};

        //JDK1.5以上,取不到下标
        //array代表数组中的元素,arrays代表数组名
        for (int array : arrays) {
            System.out.println(array);
        }
        printArray(arrays);
        System.out.println();
        printArray(reverse(arrays));
    }

    //打印数组元素
    public  static  void  printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+" ");
        }
    }

    //!!!反转数组
    public static int[] reverse(int[] arrays){
        int[] result=new int[arrays.length];

        //反转操作
        for (int i = 0,j=result.length-1; i <arrays.length ; i++,j--) {
            //把main中的数组第一个位置的元素放到result数组的尾部,实现反转操作
            result[j]=arrays[i];
        }
        return result;
    }
}

Arrays工具类

package com.cl.Array;

import java.util.Arrays;

//Arrays工具类拓展
public class ArrayDemo06 {
    public static void main(String[] args) {

        int[] a={1,2,3,4,3333,4444,555};

        //排序
        Arrays.sort(a);

        //打印数组元素Arrays.toString
        System.out.println(Arrays.toString(a));




    }

}

冒泡排序

package com.cl.Array;

import java.util.Arrays;

//冒泡排序
public class ArrayDemo067 {
    public static void main(String[] args) {
        int[] a={1,3,4,7,2,4,0};

        int[] sort=sort(a);//调用自己写的排序方法

        System.out.println(Arrays.toString(sort));


    }

    //比较数组中两个相邻的元素,如果第一个数比第二个数大,就交换位置
    //每一次比较都会产生出一个最大或最小的数字
    //下一轮则可以少一次排序,直到技术

    public static int[] sort(int[] array){

        //临时变量
        int temp=0;
        //外层循环:判断要走多少次
        for (int i = 0; i < array.length-1; i++) {
            //内层循环:如果第一个数比第二个数大则交换位置
            for (int j = 0;  j< array.length-1-i; j++) {
                if (array[j+1]>array[j]){
                    temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
        return array;
    }
}

//数组扩展:稀疏数组

先看一张图:这是稀疏数组的结果

//编写五子棋游戏中,有存盘退出和需上盘的功能
//分析:因为该二维数组很多值是默认值0,因此记录了很多没有意义的数据
//解决:稀疏数组
public class ArrayDemo08 {
    public static void main(String[] args) {
        //1.创建一个二维数组11*11   0:没有棋子, 1:黑棋  2:白棋
        int[][] array1=new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
        //输出原始数组
        System.out.println("输出原始数组");
                                        
        for (int[] ints : array1) {
            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 (array1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值个数:"+sum);
        
        //2.创建一个稀疏数组的数组
        int[][] array2=new int[sum+1][3];

        //第一行存储行数,列数,有效值个数
        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=sum;

        //遍历二维数组,将非零的值,存在稀疏数组中
        int count=0;
        for (int i = 0; i <array1.length ; i++) {
            for (int j = 0; j <array1[i].length ; j++) {
                if (array1[i][j]!=0){
                    count++;
                    array2[count][0]=i;//横坐标
                    array2[count][1]=j;//纵坐标
                    array2[count][2]=array1[i][j];//

                }
            }
        }
        //输出稀疏数组
        System.out.println("稀疏数组");

        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
                        +array2[i][1]+"\t"
                        +array2[i][2]+"\t");
        }

        System.out.println("=======================");
        System.out.println("还原");
        //1.读取稀疏数组
        int[][] array3=new int[array2[0][0]][array2[0][1]];

        //2.给其中元素还原它的值
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]]=array2[i][2];

        }

        //3.打印
        System.out.println("输出还原数组");

        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
//注:只给有值的地方赋值其他地方都是默认的值:0

 最后代码实现的结果

1.稀疏数组结果,

 注:稀疏数组的第一行代表着原始数组有11行 11列  2个非零的值

2.还原稀疏数组

posted @ 2020-09-05 19:34  凸然猿  阅读(174)  评论(0编辑  收藏  举报