首页 > 其他分享 >数组的定义和初始化

数组的定义和初始化

时间:2024-10-19 11:09:59浏览次数:1  
标签:初始化 arr 定义 int System 数组 println out

一、数组的定义

数组:是一块连续固定大小的内存空间,有着索引的概念

定义数组的语句格式:
    数据类型[] 数组名;【推荐】
    数据类型 数组名[];

二、数组的静态初始化

/*
    如果只是定义一个数组的话,没有给初始化值,相当于一个变量没有值,是不能够直接使用的
    如何对一个数组进行初始化?
        1、动态初始化:我们自己给定数组的大小,数组中的默认值由JVM来赋值
        2、静态初始化:我们自己给元素值,由JVM根据我们给的值数量来设置数组的大小

    动态初始化语句定义格式:
        数据类型[] 数组名 = new 数据类型[元素的个数];

 */
public class ArrayDemo1 {
    public static void main(String[] args) {
        //定义一个存储int类型元素的数组
        //数据类型 变量名 = 初始化值;
        int[] arr = new int[3];
        /*
            左边:
                int: 表示该数组中元素的数据类型,需要一致
                []: 表示一个一维数组
                arr:是数组名,符合标识符变量的命名规则
            右边:
                new:将来看到new,表示在堆内存中开辟一个空间
                int: 表示该数组中元素的数据类型,需要一致
                []: 表示一个一维数组
                3: 表示该数组最大只能存储3个int类型的元素
         */

        System.out.println(arr); // [I@4554617c 地址值【16进制】
        //数组有索引的概念,从左向右,索引下标从0开始编号,我们可以通过这个索引下标来定位到具体位置的元素
        //语法格式:数组名[索引]
        //获取数组中的第一个元素
        int i = arr[0];
        System.out.println(i);
        //获取数组中的第二,三个元素
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //我们以后使用数组的时候,肯定是希望将我们自己元素值放在数组中
        //将数组第一个元素值进行修改
        arr[0] = 100;
        System.out.println(arr[0]);

    }
}

三、练习

/*
    定义两个数组,先定义一个数组,赋值,输出。
    然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。
    然后给第二个数组赋值,再次输出两个数组的名及元素。

 */
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] arr1 = new int[3];
        arr1[0] = 11;
        arr1[1] = 22;
        arr1[2] = 33;
        System.out.println(arr1);
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println("-----------------------------");
        int[] arr2 = arr1;
        arr2[1] = 100;
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

四、数组的静态初始化

/*
    我们上一个案例中,学习了数组的定义以及数组的动态初始化
    但是,有一个地方不太方便,如果我们想要赋值自己的元素在数组中的话,动态初始化需要我们先将数组创建出来
    然后再一个一个赋值,其实挺麻烦的。能不能直接在初始化的时候,将元素赋值进去?

    数组的静态初始化:
        数据类型[] 数组名 = new 数据类型[]{元素1,...};
        举例:int[] arr1 = new int[]{11,22,33,44,55};
        简化写法:
            数据类型[] 数组名 = {元素1,...};

 */
public class ArrayDemo3 {
    public static void main(String[] args) {
//        int[] arr1 = new int[]{11,22,33,44,55};
//        System.out.println(arr1);
//        System.out.println(arr1[3]);

//        int[] arr1;
//        arr1 = new int[]{11,22,33,44,55};
//        System.out.println(arr1);

        int[] arr1 = {11,22,33,44,55};
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);
        System.out.println(arr1[4]);
//        System.out.println(arr1[5]); // ArrayIndexOutOfBoundsException 数组越界异常

        arr1 = null;
//        System.out.println(arr1[0]); // NullPointerException
    }
}

五、注意事项

/*
    1、当基本数据类型当作参数传递的时候,传递的是具体的数值,不会对原本的变量值进行修改影响
    2、当引用数据类型当作参数传递的时候,传递的是地址值,方法内部可能会对地址值对应的堆内存空间中的数值进行修改。
 */
public class ArrayDemo4 {
    public static void main(String[] args) {
//        int a = 10;
//        int b = 20;
//        System.out.println("a:" + a + ",b:" + b); // a:10,b:20
//        change(a, b);
//        System.out.println("a:" + a + ",b:" + b); // a:10,b:20

        int[] arr = {1, 2, 3, 4, 5};
        change(arr);
        System.out.println(arr[1]);
    }

    public static void change(int[] arr) {
        for (int x = 0; x < arr.length; x++) {
            if (arr[x] % 2 == 0) {
                arr[x] *= 2;
            }
        }
    }

    public static void change(int a, int b) {
        System.out.println("a:" + a + ",b:" + b); // a:10,b:20
        a = b;
        b = a + b;
        System.out.println("a:" + a + ",b:" + b); // a:20,b:40
    }



}

六、数组的遍历

/*
    数组遍历
 */
public class ArrayTest1 {
    public static void main(String[] args) {
        //定义一个数组并初始化
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};

//        System.out.println(arr[0]);
//        System.out.println(arr[1]);
//        System.out.println(arr[2]);
//        System.out.println(arr[3]);
//        System.out.println(arr[4]);
//        System.out.println(arr[5]);
//        System.out.println(arr[6]);
//        System.out.println(arr[7]);
        //使用for循环改进
//        for(int i=0;i<8;i++){
//            System.out.println(arr[i]);
//        }
        //我们虽然使用了for循环改进遍历,但是,我们的范围是自己数出来的,当元素多的时候,很难数对
        //java中的数组都有一个属性,length属性,我们可以直接获取数组的该属性得到数组的长度【元素的个数】
        //语句格式:数组名.length
//        System.out.println("数组的长度为:"+arr.length);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

七、获取最值

/*
    数组获取最值

    分析:
        1、创建一个数组,赋值
        2、默认第一个元素是最大值或最小值
        3、从第二个元素开始循环,依次比较出较大的值和较小的值

 */
public class ArrayTest2 {
    public static void main(String[] args) {
        int[] arr = {34, 12, 72, 13, 76, 32, 12, 46, 2, 89};

        int maxNumber = arr[0];
        int minNumber = arr[0];

        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > maxNumber) {
                maxNumber = arr[i];
            } else {
                minNumber = arr[i];
            }
        }

        System.out.println("最大值为:" + maxNumber);
        System.out.println("最小值为:" + minNumber);
    }
}

八、逆序输出

/*
    数组元素逆序
    分析:
        1、交换的次数是长度/2的整除
        2、交换的时候,需要使用到一个临时变量
 */
public class ArrayTest3 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        System.out.println("逆序前:");
        printIntArray(arr);
        System.out.println("-------------------------------");
//        //第一次交换,将第1个元素与最后一个元素交换
//        int tmp1 = arr[arr.length-0-1];
//        arr[arr.length-0-1] = arr[0];
//        arr[0] = tmp1;
//        //第二次交换,将第2个元素与倒数第2个元素交换
//        int tmp2 = arr[arr.length-1-1];
//        arr[arr.length-1-1] = arr[1];
//        arr[1] = tmp2;
//        //第三次交换,将第3个元素与倒数第3个元素交换
//        int tmp3 = arr[arr.length-2-1];
//        arr[arr.length-2-1] = arr[2];
//        arr[2] = tmp3;
//        System.out.println("逆序后:");
//        printIntArray(arr);

        //使用for循环解决
//        for (int i = 0; i < arr.length/2; i++) {
//            int tmp = arr[arr.length - i - 1];
//            arr[arr.length - i - 1] = arr[i];
//            arr[i] = tmp;
//        }

//        int[] resArr = niXu1(arr);
//        System.out.println("逆序后:");
//        printIntArray(resArr);

        int[] resArr = niXu2(arr);
        System.out.println("逆序后:");
        printIntArray(resArr);

    }

    public static int[] niXu2(int[] arr) {
        for (int front = 0, end = arr.length - 1; front < end; front++, end--) {
            int tmp = arr[end];
            arr[end] = arr[front];
            arr[front] = tmp;
        }
        return arr;
    }


    public static int[] niXu1(int[] arr) {
        for (int i = 0; i < arr.length / 2; i++) {
            int tmp = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = arr[i];
            arr[i] = tmp;
        }
        return arr;
    }

    public static void printIntArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (i == 0) {
                System.out.print("[" + arr[i] + ",");
            } else if (i == arr.length - 1) {
                System.out.println(arr[i] + "]");
            } else {
                System.out.print(arr[i] + ",");
            }
        }
    }
}

标签:初始化,arr,定义,int,System,数组,println,out
From: https://www.cnblogs.com/ndmtzwdx/p/18475652

相关文章

  • Kubernetes部署Prometheus并实现自定义指标HPA(安装、配置、实现全流程)
    1.安装kube-prometheusKube-Prometheus是一个开箱即用的监控解决方案,用于监控Kubernetes集群。它集成了Prometheus、Prometheus-Adapter、Alertmanager和一系列的导出器(exporters),使你能够轻松地收集和可视化集群中各种资源的监控数据。1.1克隆kube-prometheus仓库gitclon......
  • 一.介绍函数指针数组 二.函数指针数组的使用
    一我们先来看这个这里面的四个函数都分别存放在函数指针变量中,而且这些函数的指针类型都一模一样那我们就可以搞出一个函数指针数组,来存放这些函数的地址 函数指针数组的写法从函数指针的基础上去写是最容易的想让他成为数组,我们可以在变量p后面加一个[],p就和[]结合了,就说明......
  • 【AI学习】Mamba学习(八):HiPPO通用框架定义和方法
    在大概了解了《HiPPO通用框架介绍》后,继续看HiPPO通用框架的相关定义和方法。相关内容在论文《HiPPO:RecurrentMemorywithOptimalPolynomialProjections》的第二章描述。2TheHiPPOFramework:High-orderPolynomialProjectionOperators作者将投影作为学习记忆......
  • transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(
    上周收到一位网友的私信,希望老牛同学写一篇有关使用transformers框架推理大模型的技术细节的文章。老牛同学刚开始以为这类的文章网上应该会有很多,于是想着百度几篇质量稍高一点的回复这位网友。结果,老牛同学搜索后发现,类似文章确实不少,但是总觉得不太满意,要么细节深度不够,要么......
  • IO流读写文件(字节流(单个字节,字节数组),字节缓冲流(..),字符流(..),字符缓冲流(..))
    IO流【输入输出流】:按照流向划分:输入流:外部数据->java程序输出流:java程序->外部数据按照数据类型划分【根据使用记事本打开是否能够看懂来决定】:字节流【万能流】:字节输出流:......
  • 编写自定义dbt通用数据测试
    dbt默认提供了NotNull,Unique,Relationships,和AcceptedValues四个通用数据测试,这些测试被称为”schema测试“,底层这些通用测试就是类似宏的测试块。本文首先介绍内置通用测试,然后介绍如何自定义通用测试,最后还实践如何覆盖内置通用测试的功能。内置数据测试......
  • 局部静态变量的初始化观测
    局部静态变量的初始化观测//全局变量intglobal=0x11111;intmain(intargc,char*argv[]){//局部变量inttemp=0x160;global=global+temp;return0;}6:intglobal=0x111111;7:intmain(intargc,char*argv[])8:{00401010push......
  • Day17方法的定义和调用
    Day17方法的定义和调用方法定义何谓方法?System.out.println(),那么它是什么呢?答:System是类;out是指System输出的对象,println()是方法___()是方法Java方法是语句的集合:它们在一起执行一个功能。1.方法是解决一类问题的步骤的有序组合2.方法包含于类或对象......
  • C++ 基础-面试题01(C和C++区别、C结构体和C++结构体区别、C和C++ static区别、a和&a区
    1.C和C++的区别特性CC++编程范式面向过程编程面向对象编程+面向过程编程+泛型编程类和对象不支持类和对象支持类和对象,封装、继承、多态等特性标准库标准库有限,如stdio.h、stdlib.h丰富的标准库,如STL(容器、算法)函数和运算符重载不支持支持内存管理手动管理,使用malloc......
  • OpenAI OpenAPI 规范:探索 OpenAI API 的标准化接口定义
    OpenAIOpenAPI规范简介OpenAIOpenAPI规范是由OpenAI官方发布的一个开源项目,旨在为OpenAIAPI提供标准化的接口定义。这个项目托管在GitHub上,为开发者提供了一个清晰、结构化的方式来理解和使用OpenAI的强大API。OpenAILogo项目概览OpenAIOpenAPI规范项目位于......