javaalready收藏

5.Java数组及内存图

2022-01-07  本文已影响0人  每天起床都想摆

Java数组

数组的定义

静态初始化数组

动态初始化数组

数组的访问

元素默认规则

数据类型 明细 默认值
基本类型 byte,short,char,int,long 0
float,double 0.0
boolean false
引用类型 类,接口,数组,String null

数组的遍历

元素交换

数组的内存图

Java内存分配介绍

例子:

image.png

两个数组变量指向同一个数组对象,对数组对象的修改会引起两个数组变量同时发生变化

image.png

其他注意事项

数组常见应用

常见应用:

package com.java.test;

/**
 * 数组的常见应用:
 * 1. 元素求和
 * 2. 求最值
 * 3. 猜数字游戏
 * 4. 随机排名
 * 5. 数组排序
 */
public class ArrayCase {
    public static void main(String[] args) {
        
        //1. 元素求和
        //某部门5名员工的销售额分别是:16,26,36,6,100,请计算出他们部门的总销售额
        int[] arr1 = new int[]{16, 26, 36, 6, 100};
        for (int i = 0; i < arr1.length; i++) {
            arr1[i] += arr1[i];
        }
        System.out.println("部门的总销售额:" + arr1[arr1.length - 1]);

        System.out.println("------------------------------------------");

        //2. 求最值
        //给定一组数据求最值
        int[] arr2 = new int[]{15, 36, 72, 85, 61, -2, 99};
        int max = arr2[0];
        int min = arr2[0];
        for (int i = 1; i < arr2.length; i++) {
            if (arr2[i] > max) {
                max = arr2[i];
            }
            if (arr2[i] < min) {
                min = arr2[i];
            }
        }
        System.out.println("最大值:" + max + '\n' + "最小值:" + min);

        System.out.println("------------------------------------------");

        //3. 猜数字游戏
        //游戏规则:生成[1-20]之间的5个数(可重复),未猜中提示“未命中”并继续猜测
        // 猜中提示猜中并输出该数第一次出现的位置,然后输出全部5个数据,结束游戏
        Random r = new Random();
        Scanner sc = new Scanner(System.in);
        int[] arr3 = new int[5];
        for (int i = 0; i < 5; i++) {
            arr3[i] = r.nextInt(20) + 1;
        }


        demo:
        //创建一个break的结束标签demo
        while (true) {
            System.out.println("请合法输入位于[1,20]的任意数进行猜测!");
            int num = sc.nextInt();

            for (int i = 0; i < arr3.length; i++) {
                if (num == arr3[i]) {
                    System.out.println("您猜对了!");
                    System.out.println("您猜对的数处于数组中的第" + (i + 1) + "个");
                    for (int m = 0; m < arr3.length; m++) {
                        System.out.print(arr3[m] + "\t");
                        System.out.println();
                    }
                    break demo;
                }
            }
            System.out.println("您猜测的数据不在数组当中,请重新猜测!");
            System.out.println("--------------------------------------");

        }

        System.out.println("--------------------------------------");



        //4. 随机排名
        //有五个人需要进行演讲,请打乱他们的顺序,利用随机保证公平性
        int[] arr4 = new int[5];
        Scanner in = new Scanner(System.in);
        Random rand = new Random();

        for (int i = 0; i < arr4.length; i++) {
            System.out.println("请输入第" + (i + 1) + "位演讲者的编号:");
            arr4[i] = in.nextInt();
        }

        for (int i = 0; i < arr4.length; i++) {
            int index = rand.nextInt(arr4.length);

            int temp = arr4[index];
            arr4[index] = arr4[i];
            arr4[i] = temp;
        }

        for (int i = 0; i < arr4.length; i++) {
            System.out.print(arr4[i] + "\t");
        }
        

        System.out.println("--------------------------------------");

        //5. 数组排序
        //给定一组数据进行升序排序,算法指定:冒泡排序
        int[] arr5 = new int[]{5, 2, 3, 1};
        //                     0  1  2  3

        //定义一个循环控制比较的轮数
        for (int i = 0; i < arr5.length - 1; i++) {
            /*
                i == 1  比较的次数 3 j = 0 1 2
                i == 2  比较的次数 2 j = 0 1
                i == 3  比较的次数 1 j = 0
             */

            //定义一个循环控制每轮比较的次数,占位
            for (int j = 0; j < arr5.length - i; j++) {
                // 判断当前位置的元素值,是否大于后一个位置,若较大,则交换
                if (arr5[j] > arr5[j + 1]) {
                    int temp = arr5[j + 1];
                    arr5[j + 1] = arr5[j];
                    arr5[j] = temp;
                }
            }
        }
    }
}

数组排序

冒泡排序(面试热点)

上一篇 下一篇

猜你喜欢

热点阅读