首页 > 其他分享 >数组

数组

时间:2024-08-23 22:39:33浏览次数:6  
标签:arr int System 数组 println out

数组概念
是一块连续固定大小的内存空间,数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
特点
1、数组的长度大小是固定的
2、同一个数组中,存储的元素数据类型是一样的
3、具有索引下标的概念,将来可以通过索引获取元素
4、数组查询快,增删慢
数组的定义格式
格式1:数据类型[] 数组名;
举例:int[] arr; // 定义了一个可以存储int类型的一维数组,数组名叫做arr
格式2:数据类型 数组名[];
注意:这两种定义做完了,数组中是没有元素值的。
数组没有初始化,无法直接使用,数组是我们第一个接触到的引用数据类型

思考:如何对数组的元素进行初始化呢?

动态初始化:先规定数组的大小,数组中的元素先系统赋默认值,后续再自己赋值
语句定义格式:
数据类型[] 数组名 = new 数据类型[数组的大小];
举例:int[] arr = new int[3];
左边
int: 表示存储元素的数据类型
[]: 表示这是一个一维数组
arr: 数组名,符合标识符的命名规则,相当于变量名
右边
new: 在堆内存中开辟空间,将来看到new,就意味着在堆内存中开辟空间
int: 表示存储元素的数据类型
[]: 表示这是一个一维数组
3: 表示该数组最多可以存储3个元素,数组长度为3
白话文解释:创建了一个可以存储3个int类型元素大小的数组,数组名叫做arr
专业术语解释:在堆内存中开辟一个连续空间大小为3的数组对象,将地址值赋值给栈内存中arr变量

public class ArrayDemo2 {
    public static void main(String[] args) {
        //创建一个数组
        int[] arr = new int[3];
        System.out.println(arr); // 地址值
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println("--------------------------");
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}



静态初始化:自己将数据赋值,大小由系统根据我们赋值的数量来决定
语句定义格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,....};
举例:int[] arr1 = new int[]{11,22,33,44,55,66};
简化格式
数据类型[] 数组名 = {元素1,元素2,元素3,....};
举例: int[] arr1 = {11,22,33,44,55,66};

public class ArrayDemo4 {
    public static void main(String[] args) {
        //简化静态初始化
        int[] arr1 = {11,22,33,44,55,66};
        System.out.println(arr1);
        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
访问到了数组中的不存在的索引时发生。
空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时。

数组获取长度的属性length

语句定义格式 数组名.length 获取的是该数组的长度(元素的个数)
数组的索引最大值 = 数组名.length-1

/*Convert to Basic Latin*/
public class ArrayTest2 {
    public static void main(String[] args) {
        int[] arr = {123, 451, 45, 12, 556, 12, 412};
        //1、默认将第一个元素作为最大值以及最小值
        int maxNumber = arr[0];
        int minNumber = arr[0];
        //2、从第二个元素开始循环依次比较
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > maxNumber) {
                maxNumber = arr[i];
            } else if (arr[i] < minNumber) {
                minNumber = arr[i];
            }
        }
        System.out.println("数组最大值为:" + maxNumber);
        System.out.println("数组最小值为:" + minNumber);
    }
}
/*数组元素逆序 (就是把元素对调)*/
public class ArrayTest3 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        System.out.println("逆序前:");
        printIntArray(arr);
        //实现逆序的方式1:
        int[] resArr1 = niXu1(arr);
        System.out.println("逆序后:");
        printIntArray(resArr1);
        //实现逆序的方式2:
        int[] resArr2 = niXu2(arr);
        System.out.println("逆序后:");
        printIntArray(resArr2);
    }
 /*
        将逆序1的功能封装成一个方法
        小结论:交换的次数 = 数组的长度 / 2
     */
    public static int[] niXu1(int[] arr) {
        for (int i = 0; i < arr.length / 2; i++) {
            int tmp = arr[i];
            arr[i] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = tmp;
        }
        return arr;
    }
    public static void printIntArray(int[] array) {
        for (int i = 0; i < array.length; i++) {
            if (i == 0) {
                System.out.print("[" + array[i] + ", ");
            } else if (i == array.length - 1) {
                System.out.print(array[i] + "]");
            } else {
                System.out.print(array[i] + ", ");
            }
        }
        //换行
        System.out.println();
    }
}


二维数组概述
二维数组其实就是一个元素为一维数组的数组。
格式1
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数
举例
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素
格式2
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3]
arr[2] = new int[1];
格式3
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
举例
int[][] arr = {{1,2,3},{4,6},{6}};

二维数组遍历

public class Array2Test1 {
    public static void main(String[] args) {
        //创建一个二维数组
        int[][] arr = {{11, 22, 33, 44}, {1, 2, 3}, {100, 200, 300, 400, 500}};
        for (int i = 0; i < arr.length; i++) { // 外层循环控制的是遍历第几个一维数组元素
            for (int j = 0; j < arr[i].length; j++) { // 内层循环控制的是每一个一维数组中元素的遍历
                if (j == 0) {
                    System.out.print("[" + arr[i][j] + ", ");
                } else if (j == arr[i].length - 1) {
                    System.out.print(arr[i][j] + "]");
                } else {
                    System.out.print(arr[i][j] + ", ");
                }

            }
            //换行
            System.out.println();
        }
    }
}

标签:arr,int,System,数组,println,out
From: https://www.cnblogs.com/zhuzhuya/p/18377070

相关文章

  • 谭浩强c程序设计例题+习题 第六章 利用数组处理批量数据
    第六章利用数组处理批量数据文章目录第六章利用数组处理批量数据例6.1对10个数组元素依次赋值为0,1,2,3...,9并逆序输出例6.2用数组处理Fibonacci数列问题例6.3有10个地区的面积,要求对它们按照从小到大顺序排序例6.4将一个二维数组行和列互换存到零一个二维数组中......
  • C语言数组介绍(详解)
    数组目录数组概念一维数组⼀维数组的创建和初始化一维数组的基本创建一维数组的初始化数组的类型一维数组的使用数组下标数组元素的打印数组的输入一维数组内存中的储存如何用sizefo计算数组元素个数二维数组二维数字的概念二维数组的创建二维数组的初始化二维数组的......
  • C++的动态数组vector番外之capacity
    今日诗词:爱他明月好,憔悴也相关。西风多少恨,吹不散眉弯。                    ——《临江仙·寒柳》【清】纳兰容若目录引言正文string中的和vector中的capacity有什么区别 vector扩容时内存分配的策略是什么?capacity在vect......
  • C/C++语言基础--字符串(包括字符串与字符数组、字符串与指针、字符串处理函数等),代码
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言无论什么语言,字符串都是最重要、最基础的数据类型,他对二进制有很好的对应关系在C语言中没有提供专门的处理字符串的类型,但是我们可以通过字符数组、开辟内存地址来处理字符串本文将从字符串与字符数组的关系、字符......
  • C++基础 — 数组学习
    目录一、概述二、一维数组1.一维数组定义方式2.一维数组数组名二、二维数组1.二维数组定义方式2.二维数组数组名一、概述所谓数组,就是一个集合,里面存放了相同类型的数据元素。特点1:数组中的每个数据元素都是相同的数据类型;特点2:数组是由连续的内存位置组成的。二、......
  • C语言-数组名与&数组名的细节注意
    这篇博客将通过整型数组、字符数组、字符串放在数组中、以及二维数组的数组名与&数组名和各类特殊情况的题目讲解来使得我们对于指针与数组名具有更加深刻的了解。注意:sizeof(数组名)-数组名表示整个数组的-计算的是整个数组的大小&数组名-数组名表示整个数组,取出的是整......
  • 3.3 list(数组)
    list(数组)队列,列表的子成员类型为stringlpushkeyvaluerpushkeyvaluelinsertkeyafter|before指定元素valuelindexkeyindexlrangekeystartstoplsetkeyindexvaluelremkeycountvalue(1)添加子成员#在左侧(前)添加一条或多条数据lpushkeyvalue1value......
  • 如何给定一个数组,找出其中满足勾股数的三个值?
    勾股数的定义3个正整数(a,b,c)满足a^2+b^2=c^2的关系,则称(a,b,c)为勾股数输入描述第一行为数组n,表示第二行的数组有多少元素。第二行为数组元素。输出描述每一行表示找到的勾股数。思路创建一个数组arr,对原数组a的所有元素求得平方值后,存入到arr对应的位......
  • C语言基础--数组详解
    目录数组的概述1数组的概念2数组的分类一维数组1一维数组的定义2数组的访问3数组元素的初始值3.1先定义,后设置值3.2定义同时设置初始值3.2.1全部设置初始值3.2.2部分设置初始值4一维数组的应用实例5一维字符数组5.1一维字符数组的定义5.2一维字符......
  • [小白入门]一文掌握C/C++中数组和循环结合(堵车问题、红绿灯问题)
    1.堵车问题假如现在给定从出发地到目的地的道路条数和每条路上的车辆情况为:第一条路第二条路第三条路第四条路第五条路第六条路90705278108120且车辆数大于50为轻度拥堵;大于70为中度拥堵;大于90为重度拥堵。那么如何存储这些数据?---很显然要用数......