day04 数组、二维数组

目录

1.数组

1.1数组是什么

1.2静态数组

1.2.1数组的格式

1.2.2数组的访问

1.2.3获取数组的长度

1.3动态数组

1.3.1动态数组是什么

1.3.2动态数组的格式 

1.3.3默认值规则

1.4数组的遍历

1.4.1什么是数组的遍历

1.4.2为什么要遍历

1.4.3遍历的格式

1.5综合案例

1.5.1计算班级学生的Java成绩信息

1.5.2谁最漂亮

1.5.3扑克牌

2.二维数组

2.1二维数组是什么

2.2静态初始化

2.3动态初始化

2.4二维数组的访问

2.5二维数组的遍历

2.6案例(打乱数字)


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、long0
float、double0.0
booleanfalse
引用类型类、接口、数组、Stringnu'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();//遍历一行做了换行
        }
    }

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值