数组的概念
就是一个容器,装很多数据
- 数组的容量(长度)是固定的,无法增加也无法减少
- 数组中的所有数据的数据类型必须一致
- 在java中被当做对象来使用
- 一维数组[] 二维数组[][] 多维…
创建数组
注意:在创建的时候就要规定这个数组存的是什么类型
1. 静态初始化:先给定数据与长度
- int类型的一维数组类型:
(完整版) int[] array = new int[]{1,2,3,4,5};
(简约版) int[] array = {1,2,3,4,5};
System.out.print(array) //此时如果输出 array,输出的值为 [I@1db9742
[I@1db9742:数组在内存中的地址值:
[I : 一维数组的int @:分割 1db9742:16进制
- 数组中的元素:
- 长度:数组名.length
- 访问数组中的某一个元素:array[ 位置/索引/角标 ] ( 起始都是从0开始 )
数组第一个元素 array[ 0 ]
数组最后一个元素 array[ array.length - 1 ] - 使用循环来获取数组中的每一个元素(数组的遍历)
for(int a = 0; a < array.length ; a++){
System.out.println(array[a]);
}
2. 动态初始化:先只给定长度,后续自行增加数据
- (格式)int[] arr = new int[3] //3代表 创建了一个长度为3的一维数组
数组类型 | 默认空值 |
---|---|
int[] | 0 |
char[] | 空格 |
boolean[] | false |
String[] | null |
- 引用数据类型的数组,动态初始化默认为null---空指针
java中,内存区域的划分
- 寄存器:内存运算储存效率最高(CPU)
- 本地方法区:给本地系统使用
- 方法区:加载类的文件、加载静态的参数,常量
- 栈:局部变量,对象的引用(创建对象时,等号左边的就是引用)
- 堆:对象的实例(创建对象时,等号右边的东西/new 出来的东西)
- 局部变量:写在方法中的变量
- 全局变量:写在方法外,类中的变量
练习
- 创建一个int类型的一维数组,将里面的每一个元素 复制 给另一个数组,并且遍历出来。
package test;
public class Home1 {
public static void main(String[] args) {
//定义一个数组 静态 动态
int[] arr = {11,22,33,44,321,32,76,9879};
//定义另外一个数组 长度设置成 和 第一个数组一样 数组.length
int[] arr1 = new int[arr.length];
//在遍历 数组的 同时 , 将里面的元素一个一个的赋值
for (int i = 0; i < arr.length; i++) {
//把 arr对应 角标位置上的元素 赋值 给 arr1 的对应位置
arr1[i] = arr[i];
System.out.println(arr1[i]);
}
}
}
- 创建一个int类型的一维数组,根据键盘输入一个数,将这个数加到这个数组的末尾,并遍历出这个新的数组。
package test;
import java.util.Scanner;
public class Home2 {
public static void main(String[] args) {
//第一个数组
int[] arr = {1,2,3};
Scanner s = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = s.nextInt();
//创建第二个数组 动态 长度 比 第一个数组 多 1
int[] arr1 = new int[arr.length+1];
//在遍历第一个数组的同时 将每个元素 赋值给 第二个数组的对应的位置 ,
for (int i = 0; i < arr.length; i++) { //如果遍历第二个数组 ,越界
arr1[i] = arr[i];
}
//第二数组还剩最后一个位置 赋值成 num
arr1[arr1.length-1] = num ;
System.out.println("新数组:");
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
}
- 将星期一到星期日放进数组中,根据键盘输入一个数字,来对应打印星期数。
package test;
import java.util.Scanner;
public class Array_3 {
public static void main(String[] args) {
String[] date = new String[]{"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
Scanner s = new Scanner(System.in);
System.out.println("请输入1-7之间的数字");
int write = s.nextInt();
String res = date[write-1];
System.out.println("您输入的是:"+res);
}
}
- 随机10个(1-100之间)的整数,放进数组中,将角标为奇数的元素的值翻倍,然后遍历出来
package test;
import java.util.Random;
public class Home3 {
public static void main(String[] args) {
Random r = new Random();
//创建数组 动态
int[] arr = new int[10];
//在遍历的同时 随机数字
System.out.println("刚生成的数组:");
for (int i = 0; i < arr.length; i++) {
int num = r.nextInt(100)+1;
arr[i] = num;
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("----------------------");
System.out.println("改变后的数组:");
for (int i = 0; i < arr.length; i++) {
if(i%2==1){
arr[i] = arr[i] * 2;
}
System.out.print(arr[i]+" ");
}
}
}
- 一维打地鼠
- 初始化char类型的一维数组 O O O O O 五个洞
- 游戏循环10次
- 随机角标地鼠随机出现 O O O X O
- 提示玩家击打
- 判断是否打中
- 击中得2分,未击中扣1分(乱输入也视为没打中)
- 游戏结束,统计击中次数,未击中次数 和最后的得分
package test;
import java.util.Random;
import java.util.Scanner;
public class Home4 {
public static void main(String[] args) {
//定义 变量 ctrl + shift + o 快捷导包
Scanner s = new Scanner(System.in);
Random r = new Random();
//洞穴的数组 静态 动态
char[] arr = new char[5];//
//游戏次数
int count = 0;
//击中 未击中
int hit = 0;
int miss = 0;
//得分
int score = 0;
System.out.println("欢迎来到打地鼠游戏");
System.out.println("洞穴初始化中。。。");
for (int i = 0; i < arr.length; i++) {
arr[i] = 'O';
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("--------------------------");
//游戏 循环
while(count<10){
count++;
System.out.println("第"+count+"次,游戏:");
//地鼠随机出现 随机角标
int index = r.nextInt(arr.length);// 0 - arr.length-1
//将随机出来的角标 所对应的元素改成 X
arr[index] = 'X';
System.out.println("请注意,地鼠出现了!!!!");
System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("--------");
System.out.println("请击打:");
int player = s.nextInt()-1; // 1 2 3 4 5
//判断
if(index == player){
System.out.println("恭喜你打中了!");
hit++;
score+=2;
}else{
System.out.println("很遗憾,没打中。。。");
miss++;
score--;
}
//还原洞穴 O
arr[index] = 'O';
//显示当前得分
System.out.println("当前得分:"+ score);
}
//最终统计
System.out.println("------------------");
System.out.println("game over");
System.out.println("击中:"+ hit);
System.out.println("未击中:"+miss);
System.out.println("最终得分:"+score);
}
}