200-Java语言基础-Java编程入门-006 | Java数组定义及使用(引用数据类型)
- 为了存储同种数据类型的多个值
- 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
- 数组既可以存储基本数据类型,也可以存储引用数据类型。
- 数据类型[] 数组名 = new 数据类型[数组的长度];
1 class JavaDemo {
2 public static void main(String[] args) {
3 // 数据类型[] 数组名 = new 数据类型[数组的长度];
4 int[] arr = new int[5]; // 声明初始化了长度为5、int类型的一维数组
5
6 /*
7 * 左边:
8 * int:数据类型
9 * []:代表的数组,几个括号就代表几维数组
10 * arr:合法的标识符
11 *
12 * 右边:
13 * new:创建新的实体或对象
14 * int:数据类型
15 * []:代表的数组
16 * 5:代表的数组长度
17 */
18 }
19 }
- 就是为数组开辟连续的内存空间,并为每个数组元素赋予值
- 动态初始化 只指定长度,由系统给出初始化值
- int[] arr = new int[5];
- 静态初始化 给出初始化值,由系统决定长度
- 数据类型[] 数组名 = new 数据类型[数组长度];
1 /*
2 * 整数类型:byte、short、int、long默认初始化值都是0
3 * 浮点类型:float、double默认初始化值都是0.0
4 * 布尔类型:Boolean默认初始化值是false
5 * 字符类型:char默认初始化值是'\u0000'
6 * char在内存中占的两个字节,是16个二进制
7 * \u0000,每一个0其实代表的是16进制的0,那么四个0就是代表16个二进制位
8 *
9 * [I@15db9742
10 * [:代表是数组,几个就代表几维
11 * I:代表的是int类型
12 * @:固定格式
13 * 15db9742:代表的是十六进制的地址值
14 */
15 class JavaDemo {
16 public static void main(String[] args) {
17 // 数据类型[] 数组名 = new 数据类型[数组的长度];
18 int[] arr = new int[5]; // 数组的动态初始化,在内存中开辟连续的5块空间
19
20 System.out.println(arr[0]); // 系统给出默认初始化值,整数类型的都是0
21 arr[0] = 10;
22 System.out.println(arr[0]);
23 System.out.println(arr); // [I@15db9742
24 }
25 }
- 存储局部变量 :
- 局部变量:定义在方法声明上和方法中的变量
- 存储new出来的数组或对象
- 面向对象部分讲解
- 和系统相关
- 给CPU使用
1 /*
2 * A:栈(掌握)
3 * 存储局部变量 :
4 * 局部变量:定义在方法声明上和方法中的变量
5 * B:堆(掌握)
6 * 存储new出来的数组或对象
7 * C:方法区
8 * 面向对象部分讲解
9 * D:本地方法区
10 * 和系统相关
11 * E:寄存器
12 * 给CPU使用
13 */
14 class JavaDemo {
15 public static void main(String[] args) {
16 int[] arr = new int[3]; // 数组的动态初始化,在内存中开辟连续的3块空间
17 }
18 }
1 class JavaDemo {
2 public static void main(String[] args) {
3 int[] arr = new int[3]; // 数组的动态初始化,在内存中开辟连续的3块空间
4 System.out.println(arr);
5 arr[0] = 10;
6 arr[1] = 20;
7 System.out.println(arr[0]);
8 System.out.println(arr[1]);
9 }
10 }
1 class JavaDemo {
2 public static void main(String[] args) {
3 int[] arr1 = new int[3]; // 创建数组,长度为3
4 int[] arr2 = new int[3]; // 创建数组,长度为3
5
6 System.out.println(arr1); // 打印数组地址
7 System.out.println(arr2);
8
9 arr1[0] = 10; // 给第一个数组的第一个元素赋值
10 arr2[1] = 20; // 给第二个数组的第二个元素赋值
11
12 System.out.println(arr1[0]);
13 System.out.println(arr1[1]);
14 System.out.println(arr1[2]);
15 System.out.println("-------------");
16 System.out.println(arr2[0]);
17 System.out.println(arr2[1]);
18 System.out.println(arr2[2]);
19 }
20 }
1 class JavaDemo {
2 public static void main(String[] args) {
3 int[] arr1 = new int[3]; // 创建数组,长度为3
4 int[] arr2 = new int[5]; // 创建数组,长度为5
5 int[] arr3 = arr2;
6
7 System.out.println(arr1); // 打印数组地址
8 System.out.println(arr2);
9 System.out.println(arr3);
10
11 arr1[0] = 10;
12 arr1[1] = 20;
13
14 arr2[1] = 30;
15 arr3[1] = 40;
16 arr3[2] = 50;
17
18 System.out.println(arr1[0]);
19 System.out.println(arr1[1]);
20 System.out.println(arr1[2]);
21 System.out.println("-------------");
22 System.out.println(arr2[0]);
23 System.out.println(arr2[1]);
24 System.out.println(arr2[2]);
25 System.out.println(arr2[3]);
26 System.out.println(arr2[4]);
27 System.out.println("-------------");
28 System.out.println(arr3[0]);
29 System.out.println(arr3[1]);
30 System.out.println(arr3[2]);
31 System.out.println(arr3[3]);
32 System.out.println(arr3[4]);
33 }
34 }
- 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
- 简化格式:
- 数据类型[] 数组名 = {元素1,元素2,…};
1 /*
2 * A:静态初始化的格式:
3 * 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
4 * 简化格式:
5 * 数据类型[] 数组名 = {元素1,元素2,…};
6 * B:案例演示
7 * 对数组的解释
8 * 输出数组名称和数组元素
9 * C:画图演示
10 * 一个数组
11 */
12 class JavaDemo {
13 public static void main(String[] args) {
14 // 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
15 // int[] arr = new int[5]{11, 22, 33, 44, 55}; // 不允许动静结合
16 // 静态初始化简写形式
17 int[] arr1 = {11, 22, 33, 44, 55};
18
19 // int[] arr; // 声明数组
20 // arr = new int[]{11, 22, 33, 44, 55};
21
22 // int[] arr2;
23 // arr2 = {11, 22, 33, 44, 55}; // 简写形式声明和赋值在同一行
24 System.out.println(arr1);
25 System.out.println(arr1[0]);
26 System.out.println(arr1[1]);
27 System.out.println(arr1[2]);
28 System.out.println(arr1[3]);
29 System.out.println(arr1[4]);
30 }
31 }
1 /*
2 * A:案例演示
3 * a:ArrayIndexOutOfBoundsException:数组索引越界异常
4 * 原因:你访问了不存在的索引。
5 * b:NullPointerException:空指针异常
6 * 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
7 * int[] arr = {1,2,3};
8 * arr = null;
9 * System.out.println(arr[0]);
10 */
11 class JavaDemo {
12 public static void main(String[] args) {
13 int[] arr = new int[5];
14
15 // System.out.println(arr[5]); // 当访问数组中不存在的索引,会出现索引越界异常
16
17 arr = null;
18 System.out.println(arr[0]); // 当数组引用赋值为null,再去调用数组中的元素就会出现空指针异常
19 }
20 }
1 /*
2 *A:案例演示
3 * 数组遍历:就是依次输出数组中的每一个元素。
4 * 数组的属性:arr.length数组的长度
5 * 数组的最大索引:arr.length - 1;
6 */
7 class JavaDemo {
8 public static void main(String[] args) {
9 int[] arr = {11, 22, 33, 44, 55};
10 for (int i = 0; i < arr.length; i++) {
11 System.out.println(arr[i]);
12 }
13 }
14 }
1 /*
2 *A:案例演示
3 * 数组遍历:就是依次输出数组中的每一个元素。
4 * 数组的属性:arr.length数组的长度
5 * 数组的最大索引:arr.length - 1;
6 */
7 class JavaDemo {
8 public static void main(String[] args) {
9 int[] arr = {33, 11, 22, 55, 44};
10 int max = getMax(arr);
11 System.out.println(max);
12 }
13
14 /*
15 * 获取数组中的最大值
16 * 1、返回值类型int
17 * 2、参数列表int[] arr
18 */
19 public static int getMax(int[] arr) {
20 int max = arr[0];
21 for (int i = 1; i < arr.length; i++) { // 从数组的第二个元素开始遍历
22 if (max < arr[i]) { // 如果max记录的值小于数组中的元素
23 max = arr[i]; // max记录较大的元素
24 }
25 }
26 return max;
27 }
28 }
1 /*
2 * A:案例演示
3 * 数组查表法(根据键盘录入索引,查找对应星期)
4 */
5 class JavaDemo {
6 public static void main(String[] args) {
7
8 Scanner sc = new Scanner(System.in);
9 System.out.println("请输入1~7的数字");
10 int i = sc.nextInt();
11 System.out.println("星期" + getWeek(i));
12 }
13
14 /*
15 * 根据索引返回对应的星期
16 * 1、返回值类型char
17 * 2、参数列表int week
18 */
19 public static char getWeek(int week) {
20 char[] arr = {' ', '一', '二', '三', '四', '五', '六', '日'}; // 定义了一张星期表
21 return arr[week];
22 }
23 }
1 /*
2 * A:案例演示
3 * 数组元素查找(查找指定元素第一次在数组中出现的索引)
4 */
5 class JavaDemo {
6 public static void main(String[] args) {
7 int[] arr = {11, 22, 33, 44, 55, 66, 77, 88};
8 int index = getIndex(arr, 88);
9 System.out.println(index);
10 }
11
12 /*
13 * 查找元素索引
14 * 1、返回值类型int
15 * 2、参数列表int[] arr, int value
16 */
17 public static int getIndex(int[] arr, int value) {
18 for (int i = 0; i < arr.length; i++) {
19 if (arr[i] == value) {
20 return i;
21 }
22 }
23 return -1;
24 }
25 }
- 二维数组格式1
- int[][] arr = new int[3][2];
- 二维数组格式1的解释
- 注意事项
- 以下格式也可以表示二维数组
- 数据类型 数组名[][] = new 数据类型[m][n];
- 数据类型[] 数组名[] = new 数据类型[m][n];
- 注意下面定义的区别
- int x;
- int y;
- int x,y;
- int[] x;
- int[] y[];
- int[] x,y[]; x是一维数组,y是二维数组
1 /*
2 * A:二维数组概述
3 * B:二维数组格式1
4 * int[][] arr = new int[3][2];
5 * C:二维数组格式1的解释
6 * D:注意事项
7 * a:以下格式也可以表示二维数组
8 * 1:数据类型 数组名[][] = new 数据类型[m][n];
9 * 2:数据类型[] 数组名[] = new 数据类型[m][n];
10 * B:注意下面定义的区别
11 *
12 int x;
13 int y;
14 int x,y;
15
16 int[] x;
17 int[] y[];
18
19 int[] x,y[]; x是一维数组,y是二维数组
20 * E:案例演示
21 * 定义二维数组,输出二维数组名称,一维数组名称,一个元素
22 */
23 class JavaDemo {
24 public static void main(String[] args) {
25 /*
26 * 这是一个二维数组
27 * 这个二维数组中有3个一维数组
28 * 每个一维数组有2个元素
29 */
30 int[][] arr = new int[3][2];
31 System.out.println(arr); // 二维数组
32 System.out.println(arr[0]); // 二维数组中的第一个一维数组
33 System.out.println(arr[0][0]); // 二维数组中的第一个一维数组的第一个元素
34 /*
35 * [[I@15db9742 // 二维数组的地址值
36 * [I@6d06d69c // 一维数组的地址值
37 * 0 // 二维数组的元素值
38 */
39 }
40 }
1 /*
2 * A:二维数组格式2
3 * int[][] arr = new int[3][];
4 * B:二维数组格式2的解释
5 * C:案例演示
6 * 讲解格式,输出数据,并画内存图
7 */
8 class JavaDemo {
9 public static void main(String[] args) {
10 int[][] arr = new int[3][]; // 这是一个二维数组,这个二维数组有三个一维数组,三个一维数组都没有赋值
11
12 System.out.println(arr[0]);
13 System.out.println(arr[1]);
14 System.out.println(arr[2]);
15 arr[0] = new int[3]; // 第一个一维数组可以存储3个int值
16 arr[1] = new int[5]; // 第e二个一维数组可以存储5个int值
17 System.out.println("-------------");
18 System.out.println(arr[0]);
19 System.out.println(arr[1]);
20 System.out.println(arr[2]);
21
22 }
23 }
- int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
1 /*
2 * A:二维数组格式3
3 * int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
4 * B:二维数组格式3的解释
5 * C:案例演示
6 * 讲解格式,输出数据,并画内存图
7 */
8 class JavaDemo {
9 public static void main(String[] args) {
10 int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; // 这是一个二维数组,这个二维数组中每个大括号都代表一个一维数组
11 System.out.println(arr); // [[I@15db9742,二维数组的地址值
12 System.out.println(arr[0]); // [I@6d06d69c,一维数组的地址值
13 System.out.println(arr[0][0]); // 1,一维数组中的元素值
14 }
15 }
1 /*
2 * A:案例演示
3 * 需求:二维数组遍历
4 * 外循环控制的是二维数组的长度,其实就是一维数组的个数。
5 * 内循环控制的是一维数组的长度。
6 */
7 class JavaDemo {
8 public static void main(String[] args) {
9 int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; // 这是一个二维数组,这个二维数组中每个大括号都代表一个一维数组
10 for (int i = 0; i < arr.length; i++) { // 获取到每个二维数组中的一维数组
11 for (int j = 0; j < arr[i].length; j++) {
12 System.out.print(arr[i][j]);
13 }
14 System.out.println();
15 }
16 }
17 }
1 /*
2 * A:案例演示
3 *
4 需求:公司年销售额求和
5 某公司按照季度和月份统计的数据如下:单位(万元)
6 第一季度:22,66,44
7 第二季度:77,33,88
8 第三季度:25,45,65
9 第四季度:11,66,99
10 */
11 class JavaDemo {
12 public static void main(String[] args) {
13 int[][] arr = {{22, 66, 44},{77, 33, 88},{25, 45, 65}, {11, 66, 99}};
14
15 int sum = 0; // 定义变量,记录每次相加的结果
16 for (int i = 0; i < arr.length; i++) { // 获取到每个二维数组中的一维数组
17 for (int j = 0; j < arr[i].length; j++) { // 获取每一个一维数组中的元素
18 sum += arr[i][j]; // 累加
19 }
20 System.out.println(sum);
21 }
22 }
23 }
1 /*
2 * 基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
3 * 引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问
4 *
5 * Java到底是传值还是传址
6 * 1、既是传值,也是传地址,基本数据类型传的是值,引用数据类型传递的是地址
7 * 2、Java中只有值,因为地址值也是值(推荐这个)
8 */
9 class JavaDemo {
10 public static void main(String[] args) {
11 /*
12 int a = 10;
13 int b = 20;
14 System.out.println("a:"+a+",b:"+b); // a = 10; b = 20
15 change(a,b);
16 System.out.println("a:"+a+",b:"+b); // ? a = 10, b = 20
17 */
18 int[] arr = {1,2,3,4,5};
19 change(arr); // 得到arr = {1,4,3,8,5};
20 System.out.println(arr[1]);
21 }
22 public static void change(int a,int b) { // a = 10, b = 20
23 System.out.println("a:"+a+",b:"+b); // a = 10, b = 20
24 a = b; // a = 20
25 b = a + b; // b = 40
26 System.out.println("a:"+a+",b:"+b); // a = 20, b = 40
27 }
28 public static void change(int[] arr) { // 1, 2, 3, 4, 5
29 for(int x=0; x<arr.length; x++) {
30 if(arr[x]%2==0) {
31 arr[x]*=2;
32 }
33 }
34 }
35 }
- 记录数组一共有几行几列,有多少个不同值。
- 把具有不同值的元素和行列记录在一个小规模的数组中,从而缩小程序的规模。
- 如图:左边原始数组,右边稀疏数组
1 package com.sujian.array;
2 public class SparseArray {
3 public static void main(String[] args) {
4 /*
5 - - - - - - - - - - - -
6 - 0 0 0 0 0 0 0 0 0 0 0
7 - 0 0 1 0 0 0 0 0 0 0 0
8 - 0 0 0 2 0 0 0 0 0 0 0
9 - 0 0 0 0 0 0 0 0 0 0 0
10 - 0 0 0 0 0 0 0 0 0 0 0
11 - 0 0 0 0 0 0 0 0 0 0 0
12 - 0 0 0 0 0 0 0 0 0 0 0
13 - 0 0 0 0 0 0 0 0 0 0 0
14 - 0 0 0 0 0 0 0 0 0 0 0
15 - 0 0 0 0 0 0 0 0 0 0 0
16 - 0 0 0 0 0 0 0 0 0 0 0
17 */
18 // 1、创建一个二维数组 11* 11 0:没有棋子,1:黑棋,2:白棋
19 int[][] array1 = new int[11] [11];
20 array1[1][2] = 1;
21 array1[2][3] = 2;
22
23
24 // 2、输出原始数组
25 System.out.println("输出原始数组");
26
27
28 for (int[] ints : array1) {
29 for (int anInt : ints) {
30 System.out.print(anInt + "\t" );
31 }
32 System.out.println();
33 }
34 System.out.println("=====转换为稀疏数组后=====");
35 // 转化为稀疏数组来保存
36 // 1、获取有效值的个数
37 int sum = 0;
38 for (int i = 0; i < 11; i++) {
39 for (int j = 0; j < 11; j++) {
40 if (array1[i][j] != 0) {
41 sum++;
42 }
43 }
44 }
45 System.out.println("有效值的个数:" + sum);
46
47
48 // 2、创建一个稀疏数组
49 int array2[][] = new int[sum + 1][3];
50 array2[0][0] = 11;
51 array2[0][1] = 11;
52 array2[0][2] = sum;
53
54
55 // 3、遍历二维数组,将非零的值,存放到稀疏数组中
56 int count = 0;
57 for (int i = 0; i < array1.length; i++) {
58 for (int j = 0; j < array1[i].length; j++) {
59 if (array1[i][j] != 0) {
60 count++;
61 array2[count][0] = i;
62 array2[count][1] = j;
63 array2[count][2] = array1[i][j];
64 }
65
66
67 }
68 }
69
70
71 // 4、输出稀疏数组
72 System.out.println("输出稀疏数组");
73 for (int i = 0; i < array2.length; i++) {
74 for (int j = 0; j < 3; j++) {
75 System.out.print(array2[i][j] + "\t" );
76 }
77 System.out.println();
78 }
79
80
81 System.out.println("==========");
82 System.out.println("还原稀疏数组");
83 // 1、读取稀疏数组
84 int[][] array3 = new int[array2[0][0]][array2[0][1]];
85
86
87 // 2、给其中的元素还原他的值
88 for (int i = 1; i < array2.length; i++) {
89 array3[array2[i][0]][array2[i][1]] = array2[i][2];
90 }
91 // 3、输出还原数组
92 System.out.println("输出还原后的数组");
93
94
95 for (int[] ints : array3) {
96 for (int anInt : ints) {
97 System.out.print(anInt + "\t" );
98 }
99 System.out.println();
100 }
101 }
102 }
200-Java语言基础-Java编程入门-006 | Java数组定义及使用(引用数据类型)的更多相关文章
- 【百度文库课程】Java语言基础与OOP入门学习笔记一
一. Java的历史与由来 原名Oak,针对嵌入式系统开发设计,语法与C/C++基本一致 二. Java语言特点 Java由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应 ...
- day01<计算机基础知识&Java语言基础>
计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...
- day04<Java语言基础+>
Java语言基础(循环结构概述和for语句的格式及其使用) Java语言基础(循环结构for语句的练习之获取数据) Java语言基础(循环结构for语句的练习之求和思想) Java语言基础(循环结构f ...
- day03<Java语言基础+>
Java语言基础(逻辑运算符的基本用法) Java语言基础(逻辑运算符&&和&的区别) Java语言基础(位运算符的基本用法1) Java语言基础(位异或运算符的特点及面试题) ...
- day02<Java语言基础+>
Java语言基础(常量的概述和使用) Java语言基础(进制概述和二,八,十六进制图解) Java语言基础(不同进制数据的表现形式) Java语言基础(任意进制到十进制的转换图解) Java语言基础( ...
- Java入门篇(二)——Java语言基础(下)
上篇说到Java中的变量与常量,接下来就是简单的计算了,首先需要了解一下Java中的运算符. 六.运算符 1. 赋值运算符 赋值运算符即"=",是一个二元运算符(即对两个操作数进行 ...
- 2018.3.5 Java语言基础与面向对象编程实践
Java语言基础与面向对象编程实践 第一章 初识Java 1.Java特点 http://www.manew.com/blog-166576-20164.html Java语言面向对象的 Java语言 ...
- Java语言基础(五)
Java语言基础(五) 一.浮点数 浮点数就是小数,其标准是IEEE 754,用指数和尾数表示 例如30000=3*10000=3*10^4 其中4是指数,3是尾数 Java中,浮点数有float ...
- Java语言基础(一)
Java语言基础(一) 在这里说明一下,有基础的跳过 高手跳过.在这里我想复习以前的东西,以及给正在学java的一些帮助 我用的MyEclipse8.5编写java代码,有需要联系我 QQ:9035 ...
随机推荐
- Leetcode(38)-报数
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1&quo ...
- MDN 文档高级操作进阶教程
MDN 文档高级操作进阶教程 MDN 文档, 如何优雅的使用 MDN 文档上的富文本编辑器 pre & 语法高亮器 code & note box source code 上传附件 i ...
- HTML5 download 执行条件
HTML5 download 执行条件 同一个域名下的资源 http only 绝对路径/相对路径 都可以 demo https://cdn.xgqfrms.xyz/ https://cdn.xgqf ...
- auto embedded component in an online code editor
auto embedded component in an online code editor how to auto open a component in the third parts onl ...
- Dart: puppeteer库
和node的差不多,只有写API不一样 puppeteer 地址 安装依赖 dependencies: puppeteer: ^1.7.1 下载 chrome-win 到 <project_ro ...
- CodeMirror动态修改代码(关键: editor.getDoc().setValue(data); editor.refresh();)
在使用codemirror时,其原理是根据form中的textarea标签,自动加载其内容,获得代码行的显示.(具体使用方式参见 codemirror官网使用手册 http://codemirror. ...
- H5 常见问题汇总及解决方案
原文链接:http://mp.weixin.qq.com/s/JVUpsz9QHsNV0_7U-3HCMg H5 项目常见问题汇总及解决方案 -- 由钟平勇分享 转自 https://github.c ...
- 04_Mysql配置文件(重要参数)
Mysql配置文件(重要参数) mysql配置文件的内容 打开my.ini文件(ProgramData默认隐藏,需取消隐藏) 绿色文字为注解,并不会被加载执行 删除注解,只保留重要有用的
- Java Reference核心原理分析
本文转载自Java Reference核心原理分析 导语 带着问题,看源码针对性会更强一点.印象会更深刻.并且效果也会更好.所以我先卖个关子,提两个问题(没准下次跳槽时就被问到). 我们可以用Byte ...
- ext文件系统机制原理剖析
本文转载自ext文件系统机制原理剖析 导语 将磁盘进行分区,分区是将磁盘按柱面进行物理上的划分.划分好分区后还要进行格式化,然后再挂载才能使用(不考虑其他方法).格式化分区的过程其实就是创建文件系统. ...