数组
概念:同一种类型数据的集合。其实数组就是一个容器。数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
示例:int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
int[] arr = {3,5,1,7};
注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。
数组遍历
int [] arr = { 1, 2, 3 };for ( int y = 0; y < arr . length ; y ++) {
System. out .println( arr [ y ]);
// System.out.println(" arr ["+y+"]="+ arr [y]); 打印效果 x[0]=1;
} // 那么这就是数组的第一个常见操作.遍历
数组中有一个属性可以获取到数组中元素的个数,也就是数组的长度. 数组名.length
int
[]
arr
= { 1, 2, 3 };
for
(
int
y
= 0;
y
<
arr
.
length
;
y
++) {
System.
out
.println(
arr
[
y
]);
// System.out.println("
arr
["+y+"]="+
arr
[y]); 打印效果 x[0]=1;
}
// 那么这就是数组的第一个常见操作.遍历
数组常用技巧
String[]
arr
=
new
String[]{
"Java"
,
"C#"
,
"C++"
,
"C"
,
"Ruby"
};
//数组转List集合
List
<String>
arrList
=
new
ArrayList<String>(Arrays.
asList
(
arr
));
String[]
arr
=
new
String[] {
"Java"
,
"C#"
,
"C++"
,
"C"
,
"Ruby"
};
// 数组转set集合
Set<String>
arrList
=
new
HashSet<String>(Arrays.
asList
(
arr
));
String[]
arr
=
new
String[] {
"Java"
,
"C#"
,
"C++"
,
"C"
,
"Ruby"
};
// 判断数组中是否包含某值
boolean
b
= Arrays.
asList
(
arr
).contains(
"C#"
);
数组的常见异常
数组中最常见的问题:
1. NullPointerException 空指针异常原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。int [] x = { 1, 2, 3 };x = null ;System. out .println(x[1]);// java.lang.NullPointerException
2. ArrayIndexOutOfBoundsException 索引值越界。原因:访问了不存在的索引值。int [] x = { 1, 2, 3 };System. out .println(x[3]);//java.lang.ArrayIndexOutOfBoundsException一数组角标越界异常:,注意:数组的角标从0开始。
数组的内存分析
![](https://i-blog.csdnimg.cn/blog_migrate/a591b91be207b6421847c44c4aa60823.png)
二维数组: 一个元素为一维数组的数组。
格式1:数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数
格式2:数据类型[][] 变量名 = new 数据类型[m][];
格式3:数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素
应用:
/*
//需求:打印杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
分析:看这种图像的规律
A:任何一行的第一列和最后一列都是1
B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
步骤:
A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。这个n的数据来自于键盘录入。
B:给这个二维数组任何一行的第一列和最后一列赋值为1
C:按照规律给其他元素赋值从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
D:遍历这个二维数组。
*/
import
java.util.Scanner;
public
class
Demo9 {
public
static
void
main(String[]
args
) {
// 创建键盘录入对象
Scanner
sc
=
new
Scanner(System.
in
);
// 这个n的数据来自于键盘录入。
System.
out
.println(
"请输入一个数据:"
);
int
n
=
sc
.nextInt();
// 定义二维数组
int
[][]
arr
=
new
int
[
n
][
n
];
// 给这个二维数组任何一行的第一列和最后一列赋值为1
for
(
int
x
= 0;
x
<
arr
.
length
;
x
++) {
arr
[
x
][0] = 1;
// 任何一行第1列
arr
[
x
][
x
] = 1;
// 任何一行的最后1列
}
// 按照规律给其他元素赋值
// 从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
for
(
int
x
= 2;
x
<
arr
.
length
;
x
++) {
// 这里如果y<=x是有个小问题的,就是最后一列的问题
// 所以这里要减去1
// 并且y也应该从1开始,因为第一列也是有值了
for
(
int
y
= 1;
y
<=
x
- 1;
y
++) {
// 每一个数据是它上一行的前一列和它上一行的本列之和。
arr
[
x
][
y
] =
arr
[
x
- 1][
y
- 1] +
arr
[
x
- 1][
y
];
}
}