数组,冒泡排序

1.开辟连续的内存空间

2.给数组每个位置的数据初始化,默认值为0

3.数组a保存的是数据的地址值,并不是元素。

4.如果操作数据,需要用下标0开始。数组下标是最大长度减去1。

  数组的三种创建方法。

动态创建和静态创建

package cn.qxy.TestCreatArrary;

import com.sun.javaws.IconUtil;

import java.util.Arrays;

/**
 * 创建数组
 * 1.静态初始化
 * int[] b = new int[]{1,2,3,4,5};
 * int[] c = {1,2,3,4,5};
 * 2.动态初始化
 * int[] a = new int[5];
 * 我们通过数组的下标来操作数组中的每一个元素
 * 注意:数组的下标从0开始,最大下标为数组的长度-1;
 */
public class shuzu {
    public static void main(String[] args) {
        char[] c1={'h','e','l','l','o'};

        char[] c2=new char[]{'h','e','l','l','o'};

        char[] c3=new char[5];//创建一个长度为5额数组
        c3[0]='h';
        c3[1]='e';
        c3[2]='l';
        c3[3]='l';
        c3[4]='0';
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);


        String[] s={"秦晓燕","是仙女"};
        String[] s1=new String[]{"泡泡老师","也是仙女"};
        String[] s2=new String[3];
        s2[0]="哈哈哈";
        s2[1]="我也是";
        s2[2]="仙女";
        /**
         * char类型的数组底层中做了处理,可以直接打印数组中的具体元素
         * 但除了char类型以外的数组,如果想要查看数组中的具体元素,需要使用Arrarys.toString(数组名),注意:Arrarys需要导包。
         * 数组的长度就是数组中存放元素的个数。
         * 数组一旦创建,长度不可改变
         * 如果想要增加或者删除数组中的元素,只能先创建一个新长度的新数组,再将原来的数组复制过去。
         */
        System.out.println(s);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(Arrays.toString(s));
        System.out.println(Arrays.toString(s1));
        System.out.println(Arrays.toString(s2));
    }
}

hello
hello
hell0
[Ljava.lang.String;@1b6d3586
[Ljava.lang.String;@4554617c
[Ljava.lang.String;@74a14482
[秦晓燕, 是仙女]
[泡泡老师, 也是仙女]
[哈哈哈, 我也是, 仙女]

Arrays.copyOf(数组,新的长度)

把数组赋值成一个指定长度的新数组
新数组的长度 大于 原数组, 相当于复制,并增加位置
新数组的长度 小于 原数组, 相当于截取一部分数据

package cn.qxy.TestCreatArrary;

import sun.plugin.javascript.navig.Array;

import java.util.Arrays;

/**
 * 本类用于练习数组的复制,缩容,扩容
 * 大驼峰:第一个首字母大写
 * 小驼峰:第二个首字母大写
 */
public class dkoekel {
    public static void main(String[] args) {
        int[] from={1,2,3,4,5};
        /**1。数组的普通复制
         * 参数1:要复制那个数组
         * 参数2:新数组的长度
         * 如果新数组的长度等于原数组的长度,即简单的复制。
         */
        int[] to= Arrays.copyOf(from,5);
        /**
         * //不能直接打印to,因为是地址值
         */
        System.out.println(Arrays.toString(to));
        System.out.println(Arrays.toString(from));


        /**
         * 扩容:扩容数组的容量:新数组的长度>原数组的长度
         *思路:先创建对应新长度的新数组,每个位置上都有默认值
         * 然后从原数组中将对应的元素复制到新数组,没有被覆盖的位置还是原来的默认值。
         */
        int[] to2=Arrays.copyOf(from,10);
        System.out.println(Arrays.toString(to2));


        /**
         * 缩容
         */
        int[] s9=Arrays.copyOf(from,3);
        System.out.println(Arrays.toString(s9));
    }
}


[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
[1, 2, 3]

 数组的遍历

package cn.qxy;

import java.util.Arrays;

public class ArrayExec {
    /**
     * 本类用于练习数组的遍历
     * 要求:输出一年中每个月的天数,比如:1月有31天。
     */
    public static void main(String[] args) {
        getMonthDay();
        creatArrary();
    }
    private static void creatArrary() {
       //创建数组,动态创建,输出1-10的数
        int[] a=new int[10];
        for (int i = 0; i <=a.length-1 ; i++) {
            a[i]=i+1;

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

    private static void getMonthDay() {
        //1.创建一个数组,用来保存12个月的天数
        int[] day={31,28,31,30,31,30,31,31,30,31,30,31};
        //2.输出每个月的天数到控制台
        /**
         * 此数的循环变量i代表的是数组的下标a[a.length-1],如何变化,i++
         */
        for (int i = 0; i <=day.length-1 ; i++) {
            System.out.print("第"+(i+1)+"月:"+day[i]+"   ");
        }
    }
}
第1月:31   第2月:28   第3月:31   第4月:30   第5月:31   第6月:30   第7月:31   第8月:31   第9月:30   第10月:31   第11月:30   第12月:31   
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

package cn.qxy;
import java.util.Arrays;
import java.util.Random;
public class ArrayExec {
    /**
     * 本类用于练习数组的遍历
     * 要求:输出一年中每个月的天数,比如:1月有31天。
     */
    public static void main(String[] args) {
        //getMonthDay();
        //creatArrary();
        creatArrary2();
    }
    private static void creatArrary2() {
        int[] arr=new int[6];
        for (int i = 0; i <=arr.length-1 ; i++) {
            /**
             * 给数组上的元素赋值
             * 这个100是自定义的数
             */
            arr[i]=new Random().nextInt(100);
        }
        System.out.println(Arrays.toString(arr));
    }

    private static void creatArrary() {
       //创建数组,动态创建,输出1-10的数
        int[] a=new int[10];
        for (int i = 0; i <=a.length-1 ; i++) {
            a[i]=i+1;
        }
        System.out.println();
        System.out.print(Arrays.toString(a));
    }

    private static void getMonthDay() {
        //1.创建一个数组,用来保存12个月的天数
        int[] day={31,28,31,30,31,30,31,31,30,31,30,31};
        //2.输出每个月的天数到控制台
        /**
         * 此数的循环变量i代表的是数组的下标a[a.length-1],如何变化,i++
         */
        for (int i = 0; i <=day.length-1 ; i++) {
            System.out.print("第"+(i+1)+"月:"+day[i]+"   ");
        }
    }
}

[64, 65, 44, 83, 42, 0]

package cn.qxy.TestCreatArrary;

import java.util.Arrays;

public class maopao {
    public static void main(String[] args) {
        int[] a={1,20,45,6,5};
          sormaopao(a);
    }

    private static void sormaopao(int[] a) {
        /**
         * 1.外层循环:控制的是比较的轮数,假设有n个数,最多比较n-1轮
         * 外层循环的循环的变量代表的是轮数。length-1轮
         * 比如5个数,最多比较4轮,<=length-1,最多渠道1234共4个值。
         * 2.内层循环:j代表的是下标
         */
        int temp = 0;
        for (int i =1; i <=a.length-1 ; i++) {
            for (int j =0; j<=a.length-1-1 ; j++) {
                //j代表下标,j.length-1,是最后一个数的下标,最后一个数不需要参与比较
                if(a[j]>a[j+1]){
                   temp=a[j];
                   a[j]=a[j+1];
                   a[j+1]=temp;
                }
            }
            System.out.println("第"+i+"轮"+Arrays.toString(a));
        }
        System.out.println(Arrays.toString(a));
    }
}
第1轮[1, 20, 6, 5, 45]
第2轮[1, 6, 5, 20, 45]
第3轮[1, 5, 6, 20, 45]
第4轮[1, 5, 6, 20, 45]
[1, 5, 6, 20, 45]

Guess you like

Origin blog.csdn.net/weixin_43762083/article/details/120700319