java day06 数组(一维数组、二维数组、可变参数)

1、数组概念

1.1 数组概念

  • 1.存储多个相同数据类型的数据
  • 2.长度固定

2、数组的声明和赋值

2.1 声明

声明语法:数据类型[] 数组名称 = new int[长度]
示例:int[] nums = new int[5];

2.2 赋值

int [] nums = new int[3];
nums[0] =1;
nums[1] =2;
nums[2] =3;

3、数组的组成

3.1 组成

  • 数组中的每个数据被称为“数组元素”。
  • 对元素的访问和取值被称为“元素访问”。
  • 访问元素时,需要使用数组的下标,下标从0开始,一次+1,自动生成
  • 访问语法:数组名[下标];//例如:存:a[0]=1;取:a[0]

3.2 如何使用

如何存储100名学生的成绩?

  • 办法:使用变量存储,重复声明100个double类型变量即可
  • 缺点:麻烦,重复操作过多。

如何让100名学生成绩全部+1?

  • 办法:100个变量重复相同操作,直至全部完毕。
  • 缺点:无法进行统一的操作

解决上边两个问题,使用数组就很简单!

4、数组的遍历

4.1 for循环

遍历:从头至尾,逐一对数组的每一个元素进行访问。
遍历示例:

package Day06_Array;

import java.util.Arrays;
import java.util.Random;

/**
 * @author wzy
 * @version 1.0
 * @date 0021 2020-11-21 11:24
 */
public class  Demo04 {
    public static void main(String[] args){

        // 定义存储名字的数组names
        String[] names = {"码云","麻花头","马赛克","马保国"};
        // 定义存储点名次数的数组nums
        int[] nums = new int[names.length];

        Random random = new Random();  // 生成随机数

        // 随机点名数字
        for(int i=0;i<10;i++){
            //生成随机数 0~3
            int ranNum = random.nextInt(names.length);
            System.out.println(names[ranNum]+"被点名");
            // 次数+1
            nums[ranNum]++;
        }
        System.out.println("------------");

        // 遍历数组,打印每个人被点名的次数
        for (int i=0;i<names.length;i++){
            System.out.println(names[i]+":"+nums[i]);
        }
    }
}

4.2 foreach循环(增强for循环)

foreach遍历示例:

package Day06_Array;

/**
 * @author wzy
 * @version 1.0
 * @date 0023 2020-11-23 19:21
 */
public class Foreach {
    public static void main(String[] args) {
        String[] names = {"码云","麻花头","马赛克","马保国"};
        for (String str:names) {
            System.out.println(str);

        }
    }
}

5、可变长参数

概念:

  • 可以接收多个同类型的实参
  • 个数不限
  • 使用方式和数组相同

语法:

  • 数据类型…形参名(必须定义在形参列表后边,且只能有一个)

使用场景:

  • 使用场景:当传递的参数都是相同类型但是数量不定的时候

6、二维数组

6.1 概念、语法

概念: 一维数组里存储y一维数组,二维数组中的元素是一维数组

语法:

  • int[][] 数组名=new 数据类型[行数][列数];
  • 示例:int[][] = new int[3][3];

使用双下标访问二维数组中的元素:

  • 第一个下标代表:行号(高维下标)。
  • 第二个下标代表:列号(低维下标)。

6.2 遍历

package com.qf.ran.array;

/**
 * @author Ran
 * @since JDK 1.8
 *      二维数组
 *          一维数组里面存储一维数组
 *
 *      静态初始化和动态初始化的区别:
 *          静态初始化的一维数组长度可不一致
 *          动态初始化的一维数组长度必须一致
 *
 *      foreach的使用只能用来遍历打印数据,不能修改数据
 *
 */
public class Demo05 {
    public static void main(String[] args) {
        //动态初始化 3代表的是二维数组的长度  4代表的是1维数组的长度
        //String[][] books = new String[3][4];
        //String[][] books;
        //books = new String[3][4];
        //books[0][0] = "西游记";

        //静态初始化
        String[][] books = new String[][]{{"马宝国","马赛克"},{"雷军","雷公","雷震子"},{"昌老师"}};
        //System.out.println(books[1][2]);

        //一维数组
        int[] nums = {1,3,5,7};

        //一维数组的遍历
        System.out.println("---------一维数组的for循环遍历-------------");
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }
        System.out.println("----------一维数组的foreach遍历------------");
        //num在foreach中称为循环值,每次循环自动接收数组中的元素
        //for(元素类型 循环值:数组)
        for(int num:nums){
            System.out.println(num);
        }

        //二维数组的遍历
        System.out.println("---------二维数组的for循环遍历-------------");
        for (int i = 0;i <books.length;i++){
            for (int j = 0;j < books[i].length;j++){
                System.out.println(books[i][j]);
            }
        }

        System.out.println("----------二维数组的foreach遍历------------");
        for(String[] str:books){
            for (String book:str){
                System.out.println(book);
            }
        }
    }
}

6.3 案例(杨辉三角)

代码示例:

package com.qf.ran.array;

/**
 * @author wzy
 * @since JDK 1.8
 *          杨辉三角
 *          1.列数与行数相等
 *          2.每一行的第一个数与最后一个数为1
 *          3.除了首尾的其他数字,等于他上一行的数与上一行前一列的数相加。
 *
 *          1
 *          1   1
 *          1   2   1
 *          1   3   3   1
 *          1   4   6   4   1
 *          1   5   10  10  5   1
 */
public class Demo06 {
    public static void main(String[] args) {
        print(9);
    }

    //打印杨辉三角
    public static void print(int num){
        //行数与列数一样
        int[][] nums = new int[num][num];
        //控制的是行数
        for (int i = 0; i < nums.length; i++) {
            //控制列数
            for (int j = 0; j <= i; j++) {
                //第一列或者每列与行数相同的数设为1
                if(j == 0 || i == j){
                    nums[i][j] = 1;
                }else{
                    //其他数则等于上一行同列的数加上一行前一列的数
                    nums[i][j] = nums[i-1][j]+nums[i-1][j-1];
                }

                //打印
                System.out.print(nums[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

7、数组排序

7.1 冒泡排序

冒泡排序:相邻的两个数值比较大小,互换位置。
代码示例:

package com.qf.ran.sort;

import java.util.Arrays;

/**
 * @author Ran
 * @since JDK 1.8
 *
 *          排序算法:
 *              冒泡排序
 *                  相邻的两个数进行两两对比,符合条件的数进行交换
 *              快速排序
 *              插入排序
 *              归并排序
 *              希尔排序
 *              选择排序
 *                   一轮比较中多次比较选出最小值或者最大值,进行一次交换
 *              桶排序
 *              堆排序
 *              计数排序
 *              基数排序
 */
public class Demo01 {
    public static void main(String[] args) {
        int[] nums = {3, 1, 5, 2};

        //外层for循环控制的是轮数     nums.length-1的原因是因为最后一个数不需要进行位置确定
        for(int j = 0;j < nums.length-1;j++){
            //内层for循环控制的是每轮对比的次数
            // nums.length-j的原因是因为每轮会少一个需要比较的值
            //减一的原因是因为轮数是由j控制,j从0开始
            for (int i = 0; i < nums.length-j-1; i++) {
                if (nums[i] > nums[i + 1]) {
                    int temp = nums[i];
                    nums[i] = nums[i + 1];
                    nums[i + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(nums));


        //-------------第一轮-------------
        /*for (int i = 0; i < 3; i++) {
            if (nums[i] > nums[i + 1]) {
                int temp = nums[i];
                nums[i] = nums[i + 1];
                nums[i + 1] = temp;
            }
        }

        //-------------第二轮-------------
        for (int i = 0;i < 2;i++){
            if (nums[i] > nums[i + 1]) {
                int temp = nums[i];
                nums[i] = nums[i + 1];
                nums[i + 1] = temp;
            }
        }

        //-------------第三轮-------------
        for(int i = 0;i < 1;i++){
            if (nums[i] > nums[i + 1]) {
                int temp = nums[i];
                nums[i] = nums[i + 1];
                nums[i + 1] = temp;
            }
        }*/

        //-------------第一轮-------------
        //第一次   --  第一个数与第二个数进行比较
        /*if(nums[0] > nums[1]){
            int temp = nums[0];
            nums[0] = nums[1];
            nums[1] = temp;
        }
        //第二次   --  第二个数与第三个数进行比较
        if(nums[1] > nums[2]){
            int temp = nums[1];
            nums[1] = nums[2];
            nums[2] = temp;
        }
        //第三次   --  第三个数与第四个数进行比较
        if(nums[2] >nums[3]){
            int temp = nums[2];
            nums[2] = nums[3];
            nums[3] = temp;
        }*/

        //-------------第二轮-------------
        //第一次   --  第一个数与第二个数进行比较
        /*if(nums[0] > nums[1]){
            int temp = nums[0];
            nums[0] = nums[1];
            nums[1] = temp;
        }
        //第二次   --  第二个数与第三个数进行比较
        if(nums[1] > nums[2]){
            int temp = nums[1];
            nums[1] = nums[2];
            nums[2] = temp;
        } */

        //---------------第三轮------------
        //第一次   --  第一个数与第二个数进行比较
        /*if(nums[0] > nums[1]){
            int temp = nums[0];
            nums[0] = nums[1];
            nums[1] = temp;
        }*/
    }
}


7.2 选择排序

选择排序:一轮比较中多次比较选出最小值或者最大值,进行一次交换
代码示例:

package com.qf.ran.sort;

/**
 * @author Ran
 * @since JDK 1.8
 */
public class Demo02 {
    public static void main(String[] args) {
        int[] nums = {3,1,5,2};
        //外层for循环控制轮数
        for(int i = 0;i <nums.length - 1;i++){
            //1.定义min的初始值
            int min = i;
            //2.j为被对比数的索引
            for(int j = i+1;j < nums.length;j++){
                //nums[min]为对比数,nums[j]为被对比数
                if(nums[min] > nums[j]){
                    //改变min的索引为被对比数的索引
                    min = j;
                }
            }
            //3.判断min是否为初始值
            if(min != i){
                int temp = nums[min];
                nums[min] = nums[i];
                nums[i] = temp;
            }
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值