Day05 基础5--数组、数组工具类、二维数组、冒泡排序

1.数组 Arrya

 

1.数组的标志[ ],作用是用于存储多个相同类型数据的集合(结构),需要连续开辟内存空间,数组定义时需要明确数组类型和长度
2.想要获取数组中的元素值,可通过脚标(下标)来获取
3.数组下标从0开始,下标的最大值等于数组的长度-1

4.数组是一个引用类型,数组名a代表数组地址,保存的是数组的地址值

5.数组只适合通过下标查询,不适合增删

1.1创建数组的方式

1)方式一:动态初始化:int[] a = new int[5]; 只定义数组长度
2)方式二:静态初始化:int [] b = new int[]{1,2,3,4,5}; 
                                         或int[] c = {1,2,3,4,5}; 既给了长度又给了元素值
3)数组定义的方式两种:
    1.静态创建-知道具体元素值
    2.动态创建-知道长度,后续需要动态复制

1.2数组的遍历

从头到尾,依次访问数组每一组位置,获取每一个位置的元素值,
因为数组的遍历知道执行次数,所以可以使用for循环;我们通过数组的下标操作数组,所以for循环变量是数组的下标
开始:开始下标0 结束:结束下标length-1 如何变化:++
for(从下标为0的位置开始 ; 下标的取值 <= 数组的长度-1 ; 下标++){
循环体;}
注意:下标从0开始,最大下标是长度减1,若超出下标,会出现数组下标越界异常

练习1:输出每个月的天数

package cn.tedu.array;
//本类练习数组遍历
//需求:输出一年中每月的天数,例如:1月有31天
public class TestArrayExec {
	public static void main(String[] args) {
		//1.创建数组存12个月的天数
		int[] a = {31,28,31,30,31,30,31,31,30,31,30,31};
		//2.输出每个月的天数打印到控制台
		//遍历数组,使用for循环--通过数组下标来操作数组中的元素
		//从哪开始:0,到哪结束:a.length-1,如何变化:++
		for( int i = 0;i<=a.length-1 ;i++) {
			System.out.println((i+1)+"月有"+a[i]+"天");
			
		}
	}

}

练习2:遍历数组,动态赋值1到10

package cn.tedu.array;

import java.util.Arrays;

//练习向数组中动态赋值
public class TestArray2 {
	public static void main(String[] args) {
		//2.创建一个数组
		int[] a =new int[10];//动态创建,只指定了长度为10
		//3.可以通过for循环遍历数组,依次给数组的每个位置上的元素赋值
		//可以通过数组的下标来操作数组中的具体元素
		//从哪开始:0--a[0]表示数组中的第一个元素
		//到哪结束:a.length-1-----a[9]
		//如何变化:++
		for(int i = 0;i <=a.length-1;i++) {
			System.out.println(i);//打印下标;
			System.out.println(a[i]);//打印的是具体的元素
			a[i] = i + 1;//在每轮循环中给数组的具体元素赋值
		}
		System.out.println(a);//打印的是一个地址值
		System.out.println(Arrays.toString(a));//查看数组中的具体元素值
	}

}

练习3:遍历随机数组

public static void m3() {
	//1.创建数组--动态
	int[] a = new int[10];
	//2.遍历数组,给数组中的每个元素赋值
	for(int i = 0 ; i <a.length ; i++) {
		//100是自定义的数据,表示生成的随机整数的范围是[0,100)
		a[i] = new Random().nextInt(100);
		//a[i] = new Random().nextInt(100)+1;//取值范围前后都+1-->[1,101)
	}
	//3.使用数组的工具类查看数组中的元素
	System.out.println(Arrays.toString(a));
}

2.数组的工具类

1)Arrays.toString:查看数组
     格式:System.out.println(Arrays.toString(数组名));
     char类型底层做了处理,可以直接打印数组中具体的元素内容
     除了char类型以外的其他类型的数组,想要查看具体的元素
     都需要使用数组的工具类Arrays.toString(数组名)方法
     注意:Arrays使用时需要导包:java.util.Arrays
2)Arrays.sort:数组排序
格式:Arrays.sort(数组名);
         System.out.println(Arrays.toString(数组名));
      对于基本类型的数组使用的是快速排序算法,效率高
      对于引用类型数组,使用的是合并排序算法
3)Arrays.copyOf:把数组赋值成一个指定长度的新数组
   1. 扩容:新数组的长度 大于 原数组, 相当于复制,并增加位置(长度),但新的数组没有多余数据,包含了原来数组的数据后没有数据的地方,自动填充对应数组类型的默认值,
例如:String[]的默认值是null,byte short,int默认值是0,浮点型默认值是0.0,字符默认值是\u0000,打印出来是空格,boolean类型默认值是false
   2. 缩容:先创建对应长度的新数组,然后按照参数个数复制原数组中的数据,类似截取。
int[] to2 = Arrays.copyOf(from, 10);//括号内的(需要复制哪个数组,新数组的长度),输出的新数组数据从原数组下标为0的数据到长度-1的数据结束
4)Arrays.copyOfRange截取
      指定截取数组中的元素,左闭右开,含头不含尾[下标1,下标n)
      括号内(原数组名,下标1,原数组长度)
      截取的是下标1开始到长度减1的数据

3.冒泡排序

package cn.tedu.review;

import java.util.Arrays;

/**本类用于完成冒泡排序*/
public class DoubleSort {
    public static void main(String[] args) {
        //1.创建一个乱序的数组
        int[] a = {27,96,73,25,21};
        /**使用嵌套for循环完成排序*/
        //2.外循环,控制的是比较的轮数(n个数最多比较n-1轮)
        /**循环究竟执行几次,取决于循环变量i可以取到几个值*/
        for(int i = 1;i<a.length;i++){
            //3.内循环,控制的是每轮比较的次数
            /**j代表的是数组的下标,数组下表从0开始
             * a.length-i,是因为之前轮中比较出来的最大值不需要参与后面的比较*/
            for(int j =0;j<a.length-i;j++){
                //4.相邻比较
                if(a[j]>a[j+1]){
                    //5.位置不对就互换位置
                    int t;
                    t = a[j];
                    a[j] = a[j+1];
                    a[j+1] = t;
                }
            }

        }
        System.out.println(Arrays.toString(a));
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值