一、数组
1.1 数组定义方式一、访问
数组是一个数据容器,可用来存储一批同类型的数据

注意:“数据类型[] 数组名”也可以写成“数据类型 数组名[]”。
数组的访问:数组名[索引]。注:索引数组的元素编号是从0开始计数
获取数组的长度(元素的个数):System.out.println(arr.length);
1.2 数组的另一种定义方式
定义方式二:动态初始化数组
定义数组时不先存入具体的元素值,只确定数组存储的数据类型和数组的长度。
数据类型[] 数组名 = new 数据类型[长度];
动态初始化数组元素默认值规则:
案例:计算班级学生的Java成绩信息,要求输出平均分,最高分,最低分
AI:假设班级有8名学生,请帮我开发程序可以录入8名学生的Java成绩,成绩类型是小数,并输出平均分,最高分和最低分。
package com.itheima;
import java.util.Scanner;
public class ArrayDemo2 {
public static void main(String[] args) {
inputScore();
}
//设计一个方法录入学生成绩
public static void inputScore(){
//1.你需要一个数组来存储8名学生的成绩。
//动态初始化数组,只确定数组的类型和存储数据的容量。不事先存入具体的值。
//数据类型[] 数组名 = new 数据类型[数组的长度];
double[] scores = new double[8];
//scores=[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]
//2.录入8名学生的成绩,并把成绩存入数组中。
Scanner sc = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第"+(i+1)+"个学生的成绩");
scores[i] = sc.nextDouble();
}
//3.遍历数组,统计总分,统计最高分,统计最低分
double allScore = scores[0];
double max = scores[0];
double min = scores[0];
//该代码只使用一个for循环完成了目标中的平均分、最大值、最小值的计算,提高了代码的性能。
for (int i = 1; i < scores.length; i++) {
//i=0,1,2,3,4,5,6,7
double score= scores[i];
//4.累加当前遍历到的这个分数
allScore += score;
//5.求最大分数和最小分数
if(score>max){
max=score;
}
if(score<min){
min=score;
}
}
System.out.println("平均分="+allScore/scores.length);
System.out.println("最大分="+max);
System.out.println("最小分="+min);
}
}
1.3 数组的综合案例
案例:斗地主游戏
开发一个简易版的斗地主游戏,要求只完成做牌(存储54张牌)、洗牌。
分析
可以动态初始化一个数组,再存入54张牌到数组中,方便处理。
洗牌:就是把数组中的牌顺序打乱。
package com.itheima;
public class ArrayTest4 {
public static void main(String[] args) {
//目标:完成斗地主游戏中的做牌和洗牌
start();
}
public static void start(){
//1.做牌:创建一个动态初始化的数组存储54张牌。
String[] poker = new String[54];
//poker=[null,null,null,...]
//2.准备四种花色,还有点数,再开始做牌存入数组中去。
String[] colors = {"♥","♠","♣","♦"};
String[] nums = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
//3.遍历点数,再遍历花色
int index = 0;//定义一个变量记录牌存储的索引位置
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < colors.length; j++) {
//4.将牌存入数组中去。
poker[index++] = colors[j] + nums[i];
}
}
//4.将大小王存入数组中去。
poker[index++] = "🃏";
poker[index] = "👲";
//5.打印牌
System.out.println("新牌:");
for (int i = 0; i < poker.length; i++) {
System.out.print(poker[i] + " ");
}
System.out.println();//换行
//6.洗牌:把54张牌的数组poker中的牌,打乱,随机的。
//随机有两种方式,一种是随机两个数进行数组的交换,另一种是随机一个数,与正在遍历的数字进行交换。
//poker=[♥2,♠A,♣K,♦Q,♥J,♠10,♣9,♦8,♣7,♦6,♥5,♠4,♣3,🃏,👲]
for (int i = 0; i < poker.length; i++) {
//随机获取一个索引
int index1 = (int)(Math.random() * poker.length);
//随机获取另一个索引
int index2 = (int)(Math.random() * poker.length);
//拿着index1索引对应的牌,和index2索引对应的牌进行交换,
//1.定义一个临时变量,存储index1索引位置的数据。
String temp = poker[index1];
//2.将index2索引位置的数据,赋值给index1索引位置。
poker[index1] = poker[index2];
//3.将临时变量,赋值给index2索引位置。
poker[index2] = temp;
}
System.out.println("洗牌后:");
for (int i = 0; i < poker.length; i++) {
System.out.print(poker[i] + " ");
}
}
}
快捷键numbers.fori
二、二维数组
2.1 二维数组的定义
二维数组:数组中的每个元素都是一个一维数组。
静态初始化
数据类型[][] 数组名 = new 数据类型[][]{元素1,元素2,元素3,...};
动态初始化
数据类型[][] 数组名 = new 数据类型[长度1][长度2];

二维数组的访问
数组名[行索引];数组名称[行索引][列索引]
二维数组的遍历

案例
需求:开发一个程序可以记录咱们班级学生的座位信息
AI:存储班级座位上的学生名称,并要求输出学生名称时,能直观看到该学生所在的位置。
package com.itheima;
public class ArrayDemo5 {
public static void main(String[] args) {
//目标:二维数组的认识。
printArray();
}
public static void printArray(){
//初始化二维数组存储学生姓名,考虑到座位不规则
//静态初始化数组
String[][] classroom = {
{"张无忌" , "赵敏" , "周芷若"},//0 第一排
{"小龙女" , "周芷若" , "赵敏"},//1 第二排
{"灭绝师太" , "周芷若" ,"悬空二老","金毛狮子"},//2 第三排
{"杨逍", "纪晓芙"}//3 第四排
};
//访问:数组名【行索引】
String[] names = classroom[2];
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
//访问2:数组名【行索引】【列索引】
System.out.println(classroom[2][2]);
System.out.println(classroom[3][1]);
//长度访问:数组名.length
System.out.println(classroom.length);
System.out.println(classroom[3].length);
//动态初始化数组
int[][] arr = new int[3][5];
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] + "\t");
}
System.out.println();
}
}
}
快捷键classroom[2].var生成String[] names=classroom[2];
names[i]sop生成System.out.println(names[i]);
classroom.fori生成 for (int i = 0; i < classroom.length; i++)
2.2 二维数组的案例
案例:石头迷阵游戏
数字初始化
打乱界面的数字顺序
package com.itheima;
public class ArrayTest6 {
public static void main(String[] args) {
//目标:完成数字华容道的初始化和随机乱序。
start(4);
}
public static void start(int n){
//1.定义一个二维数组存储数字列表
int[][] arr = new int[n][n];
//2.遍历二维数组,给二维数组赋值。
int count = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = count++;
}
}
printArray(arr);
System.out.println("======================");
//3.打乱二维数组中的元素顺序
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
//遍历到的当前位置:arr[i][j]
//随机的索引位置处:m(随机的行) p(随机的列)
int m = (int)(Math.random()*arr.length);
int p = (int)(Math.random()*arr.length);
//使用一个临时变量存储m p位置处的数据
int temp = arr[m][p];
//把i j 位置处的数据赋值给m p
arr[m][p] = arr[i][j];
//把 m p 位置处的数据temp记住的赋值给i j
arr[i][j] = temp;
}
}
printArray(arr);
}
public static void printArray(int[][] arr){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
思考:打乱列数不同的数组,怎样打乱




6665

被折叠的 条评论
为什么被折叠?



