1.数组是什么?
可以存储多个数据的容器,他是一个线性结构
2.定义数组
##静态初始化
2.1静态初始化
直接将数组中的每个值都存进去
int[ ] arr = {2,5,7,54,85,45}
int[ ] arr 声明可以存储什么类型的数据,后面需要跟 [ ]
arr 数组的名称
{ } 数组中具体存储的值,用逗号分隔
2.2动态初始化
只给定数组的长度,数组中没有具体的保存的值
int[ ] brr = new int[10]
int [ ] 声明可以存储什么类型的数据,后面需要跟[ ]
brr 数组的名称
new int [10] 新建一个int 类型的数组,[ ]中的数字是数组的长度
3.数组的访问与赋值
##数组的访问
数组中的每一个元素都有一个下标(索引);他们从零开始;最大的索引是长度-1;数组的长度是length属性,访问数组是通过下标访问
public static void main(String[] args) {
int[ ] arr = {2,5,7,54,85,45};
System.out.println(arr[1]);
}
中括号中填写需要访问元素对应的下标
##修改数组中对应下标元素的值或赋值
int[ ] brr = new int[10];
brr[5]=77; //将77赋值给brr数组下标为5的元素;将原来的值覆盖
System.out.println(brr[5]);
4.遍历数组
for **循环方式**
int[ ] arr = {2,5,7,54,85,45};
for (int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
循环遍历数组中每一个元素
while**循环方式**
int[ ] arr = {2,5,7,54,85,45};
int i=0;
while (i<arr.length){
System.out.println(arr[i]);
i++;
}
**forEach方式**
forEach是jdk1.5之后新增的而一种遍历数组的方式
for (int i:arr) {
System.out.println(i);
}
5.数组的拷贝
System.arraycopy(源数组,开始位置,目标数组,开始位置,长度)
int[] arr = {2,5,7,54,85,45};
int[] brr = new int[10];
System.arraycopy(arr,2,brr,2,3);
for (int i:brr) {
System.out.println(i);
i++;
}
6.动态数组
动态数组就是可变长度的数组,出自jdk1.5以后集合框架的内容 Arraylist
ArrayList arr = new ArrayList(); //定义一个动态数组
arr.add(11); //给数组中添加每个元素
arr.add(11);
arr.add(65);
arr.add(345);
arr.add(13453);
arr.add(1234);
arr.add(10);
arr.add(10);
arr.add(10);
arr.add(10);
arr.add(10);
arr.add(1011);
arr.remove((Object)10); //删除数组中遍历到的第一个该元素
System.out.println(arr.size()); //获得数组的长度
System.out.println("_________________________________________________");
System.out.println(arr.get(4)); //通过下标获取元素
System.out.println("_________________________________________________");
for (Object i:arr) { //遍历动态数组
System.out.println(i);
}
7.多维数组
一个变量:点
一个一堆数组:线
二维数组:面
**重点学习:二维数组
数组中套数组
**定义方式**
静态初始化
public static void main(String[] args) {
int[][] a = {
{1,2234,3455,5,4,7,54,23},
{1345,224,53,65,4,7,54,3},
{18,22,433,5,454,47,54,6},
{145,22,243,435,434,7,354,3}
};
}
动态初始化
int[][] b = new int[5][3];
int[][] b1 = new int[5][]; //二维数组的长度可以不定
**访问**
先找到子数组的下标,再找到该元素在对应数组的下标
int[][] a = {
{1,2234,3455,5,4,7,54,23},
{1345,224,53,65,4,7,54,3},
{18,22,433,5,454,47,54,6},
{145,22,243,435,434,7,354,3}
};
System.out.println(a[1][0]);
**赋值**
int[][] b = new int[5][3];
int[][] b1 = new int[5][]; //二维数组的长度可以不定
b[1][0] = 67;
8.遍历数组的每个元素
使用for循环遍历
int[][] a = {
{1,2234,3455,5,4,7,54,23},
{1345,224,53,65,4,7,54,3},
{18,22,433,5,454,47,54,6},
{145,22,243,435,434,7,354,3}
};
for (int i=0;i<a.length;i++){
for (int j =0;j<a[i].length;j++){
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
使用while循环遍历
int i =0;
while (i<a.length){
int j =0;
while (j<a[i].length){
System.out.print(a[i][j]+"\t");
j++;
}
System.out.println();
i++;
}
使用forEach循环遍历
for (int[] i:a) {
for (int j:i) {
System.out.print(j+"\t");
}
System.out.println();
}
练习题:
电影院选座
1.定义一个二维数组8行8例
2.每个元素随机生成0和1,1表示有人选了,0表示没人
3.提示用户输入行和列,判断座位有没有人,有人提示不可选,重新选,没人就提示可选,将该座位边成1
4.可查看所有选座情况
public class Demo2 {
static Scanner sc = new Scanner(System.in);
static int[][] arr = new int[8][8];
public static void main(String[] args) {
System.out.println("===========================欢迎来到猫眼影院====================================");
buy();
}
public static void buy(){
System.out.println("这是当前座位表");
look();
System.out.println("请输入你需要购买的座位编号(x,y)");
int x = sc.nextInt();
int y = sc.nextInt();
if (arr[x-1][y-1]==0){
System.out.println("座位可购");
System.out.println("订购成功!");
arr[x-1][y-1]=1;
}else {
System.out.println("座位已有人,不可购!");
System.out.println("请重新选择");
buy();
}
}
public static void look() {
for (int i = 0;i<arr.length;i++){
for (int j =0;j<arr[i].length;j++){
int a = (int)(Math.random()*10);
if (a<5){
arr[i][j]=0;
}else {
arr[i][j] = 1;
}
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}