Java基础知识day04

一、数组

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();
        }
    }
}

思考:打乱列数不同的数组,怎样打乱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c萱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值