目录
1.数组
1.1数组是什么
数组是一个数据容器,可用来存储一批同类型的数据。
1.2静态数组
1.2.1数组的格式
//静态数组,定义时已经确定了数据
数据类型[] 数组名={元素一,元素二,元素三,...};
int[] arr={1,2,3};
//完整格式
数据类型[] 数组名=new 数据类型[] {元素一,元素二,元素三,...};
int[] arr=new int[] {1,2,3};
注:“数据类型[ ] 数组名”也可以写作“数据类型 数组名[ ]”。
1.2.2数组的访问
数组名[索引]
注:元素在数组中存储,是有顺序的. 这个顺序在数组中叫索引,从0开始 。
注:如果访问的索引不存在 就会出现索引越界问题。
int[] arr = {13,14,222,1,2,33};
System.out.println(arr[0]);
arr[2] = 111;
System.out.println(arr[2]);
1.2.3获取数组的长度
获取数组的长度(就是数组元素的个数)
int[] arr = {13,14,222,1,2,33};
System.out.println("arr数组中数组的个数:"+arr.length);
1.3动态数组
1.3.1动态数组是什么
定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度
1.3.2动态数组的格式
数据类型[] 数组名=new 数据类型[长度];
1.3.3默认值规则
数据类型 | 明细 | 默认值 |
基本类型 | byte、short、char、int、long | 0 |
float、double | 0.0 | |
boolean | false | |
引用类型 | 类、接口、数组、String | nu'l |
1.4数组的遍历
1.4.1什么是数组的遍历
就是一个一个数据的访问。
1.4.2为什么要遍历
求和、元素搜索、找最大值、找最小值
1.4.3遍历的格式
int[] arr = {20, 30, 40, 50};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
1.5综合案例
1.5.1计算班级学生的Java成绩信息
/*
需求分析:
求8名学生java成绩的 平均分 最高分 最低分
步骤:
1.定义数组,用来存储8名学生的成绩 (采用动态初始化)
2:录入8名学生的成绩
2.1 创建键盘录入对象
2.2 循环8次,循环次数和数组的长度一致
2.3 每次循环,让用户输入一个成绩,然后把成绩存到数组中
3:求出学生的平均分 最高分 最低分
3.1 求出所有成绩的和---求出平均分
3.2 找出最高分 最低分
4:把平均分 最高分 最低分 打印
*/
public static void main(String[] args) {
double[] arr=new double[8];
Scanner sc=new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第"+(i+1)+"号学生的成绩:");
double score=sc.nextDouble();
arr[i]=score;
}
double sum=0;
double max=arr[0];
double min=arr[0];
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
if (max>arr[i]){
max=arr[i];
}
if (min<arr[i]){
min=arr[i];
}
}
double avg=sum/ arr.length;
System.out.println("平均成绩为:"+avg);
System.out.println("最高分为:"+max);
System.out.println("最低分为:"+min);
}
1.5.2谁最漂亮
/*
数组求最值问题
思路
1:循环外定义一个最大值max 接收数组第一个元素 (假设第一个是最大的)
2:遍历数组,将数组中的元素与max比较,如果大于max,则将max替换为当前元素(保证max是比较后的最大值)
3:循环结束后,max就是数组中的最大值
*/
public static void main(String[] args) {
int[] arr={15,9000,10000,20000,9500,-5};
int max=arr[0];
for (int i = 1; i < arr.length; i++) {
int data=arr[i];
if (data>max){
max=data;
}
}
System.out.println(max);
}
1.5.3扑克牌
开发一个简易版的斗地主游戏,要求只完成做牌(存储54张牌)、洗牌。
public static void main(String[] args) {
//1:用动态初始化的方式 定义一副扑克牌 长度为54
String[] pokerBox =new String[54];
//2:准备 花色 和 点数
// 扑克牌的花色 四种
String[] colors = {"♦","♣","♥","♠"};
//扑克牌点数 13种
String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
//组装牌?遍历点数 再遍历花色 点数和花色拼接,拼接之后存到数组的指定位置
//2.1 定义变量 index 表示 扑克牌的存储位置(索引)
int index = 0;
//2.2 先遍历点数 每个点数和不同花色进行拼接产生新的牌
for (int i = 0; i < numbers.length; i++) {
//i 遍历点数数组 的索引
String number = numbers[i];//获取点数 2 3 4 5 .....
for (int j = 0; j < colors.length; j++) { //j 遍历花色数组的索引
String color = colors[j];//取出的 "♦","♣","♥","♠"
//拼接一张牌
String card = color+number;//拼接牌
pokerBox[index] = card;//存到指定的位置
index++;//该下一个位置
}
}
//4*13=52 还少 小王 大王
pokerBox[index] = "🃏";
pokerBox[++index]= "👲";
// 3: 查看牌 遍历pokerbox
for (int i = 0; i < pokerBox.length; i++) {
System.out.print(pokerBox[i]+" ");
}
System.out.println();
System.out.println("=================洗牌操作================");
//4:洗牌 --- 打乱数组中元素的顺序 其实就是将牌面的位置交换!!!!
/*
洗牌思路
就是将牌的位置进行交换。
遍历扑克牌数组---依次完成交换
每次怎么交换呢?
当前位置 牌A
随机位置 牌B
交换位置 牌A 牌B
*/
Random random = new Random();
for (int i = 0; i < pokerBox.length; i++) {
// pokerBox[i]; 牌A
//随机获取一个索引 表示牌B的索引位置
int indexB = random.nextInt(pokerBox.length);//随机出一个位置
// pokerBox[indexB]; 牌B
//cardA cardB 交换位置
String temp = pokerBox[i];//牌A
pokerBox[i] = pokerBox[indexB];//牌B
pokerBox[indexB] = temp;
}
System.out.println("=================洗牌之后遍历================");
for (int i = 0; i < pokerBox.length; i++) {
System.out.print(pokerBox[i]+" ");
}
System.out.println();
}
2.二维数组
2.1二维数组是什么
数组中的每个元素都是一个一维数组,这个数组就是二维数组。
2.2静态初始化
数据类型[][] 数组名 = new 数据类型[][]{元素1, 元素2, 元素3, ...};
int[][] arr={
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
2.3动态初始化
数据类型[][] 数组名 = new 数据类型[长度1][长度2];
//3行4列
String[][] arr=new String[3][4];
2.4二维数组的访问
首先定义一个二维静态数组
String[] row1={"1","2","3","4"};
String[] row2={"5","6","7","8"};
String[] row3={"9","10","11","12"};
String[] row4={"13","14","15","16"};
String[][] numbers={row1,row2,row3,row4};
如果想获得数字“6”,那么有两种方法:
先找行,再找列
String[] find=numbers[1];
String name=find[1];
System.out.println(name);
直接找
System.out.println(numbers[1][1]);
2.5二维数组的遍历
首先定义一个二维静态数组
int[][] arr={
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
如果想遍历输出整个数组,有同样的两种方法:
先遍历行,再遍历列:
for (int i = 0; i < classroom.length; i++) {
String[] names = classroom[i];//names 是 一维数组
//再遍历一维数组
for (int j = 0; j < names.length; j++) {//j是 一维数组索引
System.out.print(names[j]+" ");//names[j] 一维数组中的元素
}
System.out.println();//换行 一维数组中元素 输出在一行上 每次输出玩一个一维数组换行
}
直接遍历:
for (int i = 0; i < classroom.length; i++) {
for (int j = 0; j < classroom[i].length; j++) {
System.out.print(classroom[i][j]+" ");
}
System.out.println();
}
2.6案例(打乱数字)
public static void main(String[] args) {
/*
石头迷阵
准备好一个迷阵
1:定义一个二维数组,用来存储迷阵 图片的编号
第一行 1 2 3 4
第二行 5 6 7 8
第三行 9 10 11 12
第四行 13 14 15 16
*/
//1:定义二维数组
int[][] arr = {
{1, 2, 3, 4},//一维数组的索引 0
{5, 6, 7, 8},// 1
{9, 10, 11, 12},//2
{13, 14, 15, 16}//3
};
//备注 1 元素 行索引是0 列索引是0 11 行索引是2 列索引是2
// 10 行索引是2 列索引是1
//遍历 打印出 里面每个数组 怎么从二维数组取数据呢 ? 数组名[行索引][列索引]
for (int i = 0; i < arr.length; i++) {//i是行
for (int j = 0; j < arr[i].length; j++) {//j是列索引
System.out.print(arr[i][j] + "\t");
//找到迷阵中指定的数据 \t 制表符 tab
}
System.out.println();//遍历一行做了换行
}
Random random = new Random();
System.out.println("===========将二维数组中每个小元素 打乱顺序 ====================");
for (int i = 0; i < arr.length; i++) {//i是行
for (int j = 0; j < arr[i].length; j++) {//j是列索引
//找到当前元素
// arr[i][j]当前元素 arr[随机行][随机列]
int n = random.nextInt(arr.length);//随机行索引
int m = random.nextInt(arr.length);//随机列索引
// arr[n][m] 要用来交换的数据
int temp = arr[i][j];
arr[i][j] = arr[n][m];
arr[n][m] = temp;
}
}
System.out.println("=====================================");
for (int i = 0; i < arr.length; i++) {//i是行
for (int j = 0; j < arr[i].length; j++) {//j是列索引
System.out.print(arr[i][j] + "\t");
//找到迷阵中指定的数据 \t 制表符 tab
}
System.out.println();//遍历一行做了换行
}
}