编程语言
首页 > 编程语言> > java从零到项目实践(五)

java从零到项目实践(五)

作者:互联网

Day 4(数组)

到此为止,java基础语法部分全部结束,为坚持到这的自己加个油!


文章目录


java数组

数组概述

在这里插入图片描述

要点:相同类型数据、按一定先后次序、下标从0开始(下标为0对应第一个元素)

数组声明创建

在这里插入图片描述
在这里插入图片描述

示例代码:

public class creatDemo01 {
    public static void main(String[] args) {
        //创建数组: 变量类型 + 变量名 = 变量值
        int[] x; //声明一个int类型的数组x
        x = new int[5];  //用new分配一个大小为10的空间给x,这里才是实际创建数组x

        //声明数组也可采用c/c++的方式
        //int y[];

        //创建数组也可一步到位:
        int[] y = new int[10];

        //定义数组中的元素
        x[0] = 1;
        x[1] = 2;
        x[2] = 3;
        x[3] = 4;
        x[4] = 5;

        //计算总和
        int sum = 0;
        for (int i = 0; i < x.length; i++) {//length属性获取数组长度
            sum = sum + x[i];
            //显示数组元素
            //System.out.println("x[" + i + "]: " + x[i]);
        }
        System.out.println(sum);
    }
}

三种初始化及内存分析

在这里插入图片描述

声明创建时的内存管理:

在这里插入图片描述

三种初始化:

在这里插入图片描述

示例代码:

public class arrayDemo02 {
    public static void main(String[] args) {
        //静态初始化:   创建+赋值
        int[] a = {1,2,3,4,5};
        System.out.println(a[0]);

        System.out.println("======================");

        //动态初始化:  包含了默认初始化(即所有数据在未赋值前均以默认值为初始值),例如这里除了b[0]和b[1]外,所有数组元素全为0
        int[] b = new int[5];
        b[0] = 12;
        b[1] = 3;
        for (int i=0; i<b.length; i++){
            System.out.println(b[i]);
        }

    }
}

数组边界

在这里插入图片描述

数组使用

在这里插入图片描述

示例代码:

public class arrayDemo03 {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5};

        //普通for循环使用
        for (int i = 0; i < a.length; i++) {
            System.out.println("普通for循环打印:" + a[i]);
        }

        System.out.println("===================");

        //for-each增强for循环,只适用于遍历打印数组元素,无下标操作JDK1.5
        for (int i : a) {
            System.out.println("for-each打印: " + i);
        }
        System.out.println("===================");

        Array(a);

        System.out.println("====================");
        int[] P = pArray(a);
        Array(P);
    }

    //数组作为方法入参
    public static void Array(int[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }

    //数组作为返回值
    //数组翻转
    public static int[] pArray(int[] a) {
        int[] value = new int[a.length];
        //翻转的操作
        for (int i=0,j=a.length-1; i<a.length; i++, j--){
            value[i] = a[j];
        }
        return value;
    }
}

多维数组

在这里插入图片描述

多维数组实质是数组的嵌套,即数组的每个元素仍然为一个数组

在这里插入图片描述

示例代码:

public class arrayDemo04 {
    public static void main(String[] args) {
        //二维数组
        /*
        1,2    a[0]
        2,3    a[1]
        3,4    a[2]
        4,5    a[3]
         */
        int[][] a = {{1,2},{2,3},{3,4},{4,5}};//两个[]表示二维数组

        Array(a[0]);

        System.out.println("========");
        //遍历数组中的所有元素
        for (int i=0; i<a.length; i++){
            for (int j=0; j<a[i].length; j++){
                System.out.print(a[i][j]);
            }
        }
    }

    //打印数组中的元素
    public static void Array(int[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

Arrays类

在这里插入图片描述

拓展:冒泡排序

示例代码:

import java.util.Arrays;

public class maopaoDemo05 {
    public static void main(String[] args) {

        int[] a = {1,3,2,2,4,5,4,33,1,546,12,343,3};
        int[] b = array(a);

        //打印数组元素时,不能直接打印,要么通过自己写方法遍历出来,要么用Arrays类提供的Arrays.toString(参数)
        //System.out.println(b);//[I@135fbaa4,
        System.out.println(Arrays.toString(b));
    }

    //冒泡法:
    /*
    1.比较数组中两个相邻的元素,如果第一个数比第二个数大(或小),就交换位置
    2.每一次比较都会产生一个最大或最小的数字
    3.下一轮排序次数依次减少
    4.依次循环,直到结束
     */
    public static int[] array(int[] a) {
        int temp = 0; //用来实现数据交换的媒介
        for (int i=0; i<a.length-1; i++){
            for (int j=0; j<a.length-1-i; j++){
                if (a[j+1]<a[j]){
                    temp = a[j+1];
                    a[j+1] = a[j];
                    a[j] = temp;
                }
            }
        }
        return a;
    }
}

稀疏数组

在这里插入图片描述

稀疏数组主要解决的问题是,当前数组中存储了大量无意义的0元素时,采用该方法进行有效的压缩操作。

以上表格为例:

【0】行表示,该数组共有6行、7列、8个有效数字

【1】行表示,第一个有效数字为22,在第0行、3列

【2】行表示,第二个有效数字为15,在第0行、6列

……

示例代码:

public class arrayDemo06 {
    public static void main(String[] args) {
        //需求:编写一个矩阵,将其转化为稀疏矩阵并实现还原
        int[][] a1 = new int[10][10];
        a1[1][2] = 1;
        a1[2][3] = 2;

        //输出原始的数组
        System.out.println("原始数组:");
        array(a1);  //调用方法array输出数组

        //转换为稀疏数组保存
        //1.获取有效值的个数
        int sum = 0;
        for (int i=0; i<a1.length; i++){
            for (int j=0; j<a1.length; j++){
                if (a1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("===============");
        System.out.println("有效个数为:" + sum);

        //2.声明创建一个稀疏数组
        //行数:有效个数+1;  列数:3
        int[][] a2 = new int[sum+1][3];

        //3.根据系数矩阵特点赋值
        //稀疏数组第一行:存储的是原数组整体信息
        a2[0][0] = a1.length; //a1的行数
        a2[0][1] = a1.length; //a1的列数
        a2[0][2] = sum; //有效数据个数
        //稀疏数组第二行开始:每行依次存储第i个有效数字以及所在的行列信息
        int count = 0;//记录有效数字出现次数,对应记录在稀疏数组的相应行上
        //找到有效数字所在位置
        for (int i=0; i<a1.length; i++){
            for (int j=0; j<a1.length; j++){
                if (a1[i][j]!=0){
                    count++;
                    a2[count][0] = i;
                    a2[count][1] = j;
                    a2[count][2] = a1[i][j];
                }
            }
        }
        System.out.println("输出稀疏数组:");
        array(a2);//调用方法array输出数组
        System.out.println("=================");

        //将稀疏数组还原为原始数组
        //1.声明创建一个原始数组
        //稀疏数组[0][0]和[0][1]元素即为原数组的行列数
        int[][] a3 = new int[(a2[0][0])][(a2[0][1])];
        for (int i=1; i<a2.length; i++){
            a3[(a2[i][0])][(a2[i][1])] = a2[i][2];
        }
        array(a3);
    }



    //输出数组元素
    public static void array(int[][] a){
        for (int i=0; i<a.length; i++){
            for (int j=0; j<a.length; j++){
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }
    }

}

标签:java,int,实践,System,零到,数组,println,public,out
来源: https://blog.csdn.net/qq_44080263/article/details/122516517