JAVA基础 - 数组

一、数组概述

  数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)

二、实例

package com.hello.array;

import java.util.Random;
import java.util.Scanner;

/*
一、java内存分配介绍
1、方法区:字节码文件加载时进入的内存  .class文件
2、栈:方法运行时所进入的内存 变量也是在这里
3、堆:new出来的东西会在这块内存中开辟空间并产生地址
4、本地方法栈
5、寄存器
二、两个数组变量指向同一个数组对象
 */

public class Array {
    public static void main(String[] args) {
        //静态初始化数组的格式与数组的访问
        int[] ages = {11,15,21,25,31,35};//完整格式:int[] ages = new int[] {11,15,21,25,31,35};
        System.out.println(ages);//打印的是数组存储的地址
        System.out.println(ages[0]);//数组的访问: 数组名称[索引],  数组的长度:数组名称.length,数组的最大索引:数组名.length-1

        //动态初始化数组:定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据。
        double[] score = new double[3];//元素默认值:float\double是0.0,byte\short\char\int\long是0,string是null,boolean是false
        score[0] = 89.5;
        System.out.println(score[0]);

        //数组遍历:就是一个一个数据的访问
        //需求1 数组元素求和:某部门5名员工的销售额分别是16、26、36、6、100,请计算出他们部门的销售总额
        int [] money = {16,26,36,6,100};
        int sum = 0;
        for(int i=0;i<money.length;i++){
            sum += money[i];
        }
        System.out.println(sum);

        //需求2 数组求最值
        int[] faceScore = {15,9000,10000,20000,9500,-5};//定义一个静态初始化数组,存储一组颜值
        int max = faceScore[0];//定义一个变量用于存储最大值元素,建议使用第一个元素作为参照
        //遍历数组的每个元素,依次与最大值变量的数据比较,若较大,则替换
        for (int i=0;i<faceScore.length;i++){ //根据实际业务场景,i初始化值应为1,因为15不用跟自己比
            if(faceScore[i]>max){
                max = faceScore[i];
            }
        }
        System.out.println("数组的最大值是:"+max);

        //需求3 猜数字游戏:随机生成1-20之间的5个数,未猜中提示未命中,猜中提示运气不错,并输出该数据第一次出现的位置,且输出全部5个数据,最终结束本游戏
        Random r = new Random();
        int[] luckyArray = new int[5];//定义一个动态初始化的数组存储5个随机的1-20之间的数据
        for(int i=0;i<luckyArray.length;i++){ //动态的生成5个随机数并存储到数组中去
            luckyArray[i] = r.nextInt(20)+1;
            System.out.println(luckyArray[i]);
        }
        Scanner sc = new Scanner(System.in);
        OUT:
        while (true){ //使用一个死循环让用户进行猜测
            System.out.println("请您输入一个1-20之间的整数进行猜测:");
            int guessData = sc.nextInt();
            for (int i=0;i<luckyArray.length;i++) {
                if (guessData == luckyArray[i]) {
                    System.out.println("恭喜您猜中了" + luckyArray[i]);
                    break OUT;//结束了整个死循环,代表游戏结束了(如果只break,只会会结束for循环,并没有结束整个while)
                }
            }
            System.out.println("未猜中,请继续");
        }
        for (int i = 0; i < luckyArray.length; i++) {
            System.out.print(luckyArray[i]+"\t");
        }

        //需求4:键盘录入一组工号,最终要随机输出一组出来作为排名
        Scanner scCode = new Scanner(System.in);
        int [] codes = new int[5];//动态初始化一个数组,存储5个工号
        for (int i = 0; i < codes.length; i++) {  //定义一个循环,依次录入一个工号存入对应的位置
            System.out.println("请输入第"+(i+1)+"个员工的工号");
            codes[i] = scCode.nextInt();
        }

        //遍历数组中的每个元素,然后随机一个索引出来 ,让该元素与随机索引位置处的元素进行交换
        //codes = [11,22,33,44,55]
        Random r1 = new Random();
        for (int i = 0; i < codes.length; i++) {
            //当前遍历的元素值:codes[i]
            //随机一个索引位置出来:codes[index]
            int index = r1.nextInt(codes.length);
            //定义一个临时变量存储index位置处的值
            int temp = codes[index];
            codes[index]=codes[i];
            codes[i] = temp;
        }
        for (int i = 0; i < codes.length; i++) {
            System.out.print(codes[i]+"\t");
        }

        //冒泡排序(要了解比较的轮次,每轮比较的次数)
        //冒泡排序思想:1、从头开始两两比较,把较大的元素与较小的元素进行交换;
        // 2、每轮把当前最大的一个元素存入到数组当前的末尾。
        //冒泡排序的实现步骤:1、定义一个外部循环控制总共需要冒几轮(数组的长度-1);
        // 2、定义一个内部循环,控制每轮依次往后比较几个位置(数组长度-i-1);
        // 3、如果当前位置的元素值>后一个位置的元素值,两者交换。
        int [] arr = {5,2,3,1};//定义一个数组,存储一些数据
        //定义一个循环控制比较的轮数
        for(int i=0;i<arr.length-1;i++){
            //i==0  比较的次数3  j= 0  1  2
            //i==1  比较的次数2  j= 0  1
            //i==2  比较的次数1  j= 0
            //定义一个循环控制每轮比较的次数
            for(int j=0;j<arr.length-i-1;j++){
                //判断j当前位置的元素值
                if(arr[j]>arr[j+1]){
                    int tem = arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=tem;
                }
            }
        }
        //遍布数组的输出
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章