• JAVA数组


    数组

    一、一维数组

    1、数组的定义方式

    数据类型[] 数组名 = new 数据类型[元素个数或数组长度];

    int[] x = new int[100];

    拆分:

    int[] x;              // 声明一个int[]类型的变量
    x = new int[100];    // 创建一个长度为100的数组

    2、一维数组内存图解:

    3、定义数组和访问数组中的元素:

     1public class ArrayDemo01 {
     2    public static void main(String[] args) {
     3        int[] arr; // 声明变量
     4        arr = new int[3]; // 创建数组对象
     5        System.out.println("arr[0]=" + arr[0]); // 访问数组中的第一个元素
     6        System.out.println("arr[1]=" + arr[1]); // 访问数组中的第二个元素
     7        System.out.println("arr[2]=" + arr[2]); // 访问数组中的第三个元素
     8        System.out.println("数组的长度是:" + arr.length); // 打印数组长度
     9    }
     10}

    4、各种数据类型的数组默认初始化值:

    5、元素赋值方式:

     1public class ArrayDemo02 {
     2    public static void main(String[] args) {
     3        int[] arr = new int[4]; // 定义可以存储4个整数的数组
     4        arr[0] = 1; // 为第1个元素赋值1
     5        arr[1] = 2; // 为第2个元素赋值2
     6        // 下面的代码是打印数组中每个元素的值
     7        System.out.println("arr[0]=" + arr[0]);
     8        System.out.println("arr[1]=" + arr[1]);
     9        System.out.println("arr[2]=" + arr[2]);
     10        System.out.println("arr[3]=" + arr[3]);
     11    }
     12}

    6、数组的静态初始化方式:

    1)、类型[] 数组名 = new 类型[]{元素,元素,……};

    2)、类型[] 数组名 = {元素,元素,元素,……};

    实例:

     1public class ArrayDemo03 {
     2    public static void main(String[] args) {
     3        int[] arr = { 1, 2, 3, 4 }; // 静态初始化
     4        // 下面的代码是依次访问数组中的元素
     5        System.out.println("arr[0] = " + arr[0]);
     6        System.out.println("arr[1] = " + arr[1]);
     7        System.out.println("arr[2] = " + arr[2]);
     8        System.out.println("arr[3] = " + arr[3]);
     9    }
     10}

    7、总结:

    public static void main(String[] args) 
        {
            //数组定义
            int[] x=new int[3];
            int[] a={2,4,6,8,3,5,9};
            //赋值
            x[0]=1;
            x[1]=2;
            x[2]=3;
            //取值
            System.out.println(x[2]);
            for(int i=0;i<a.length;i++){
                System.out.println(a[i]);
            }
        }

    二、数组遍历

    在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。

    方式:

    public class ArrayDemo04 {
        public static void main(String[] args) {
            int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
            // 使用for循环遍历数组的元素
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]); // 通过索引访问元素
            }
        }
    }

    三、数组最值

    方法:

    public static void main(String[] args) {
            int[] arr = { 4, 1, 6, 3, 9, 8 }; // 定义一个数组
    int max = arr[0]; // 定义变量max用于记住最大数,首先假设第一个元素为最大值
            // 下面通过一个for循环遍历数组中的元素
            for (int x = 1; x < arr.length; x++) {
                if (arr[x] > max) { // 比较 arr[x]的值是否大于max
                    max = arr[x]; // 条件成立,将arr[x]的值赋给max
                }
            }
            System.out.println("max=" + max); // 打印最大值
        }

    最小值同理

    四、数组常见问题:

    1、数组越界异常:

    每个数组的索引都有一个范围,即0~length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错

    实例:

     1public class ArrayDemo06 {
     2    public static void main(String[] args) {
     3        int[] arr = new int[4]; // 定义一个长度为4的数组
     4        System.out.println("arr[0]=" + arr[4]); // 通过角标4访问数组元素
     5    }
     6}

    上图运行结果中所提示的错误信息是数组越界异常ArrayIndexOutOfBoundsException,

    出现这个异常的原因是数组的长度为4,其索引范围为0~3,

    而上述代码中的第4行代码使用索引4来访问元素时超出了数组的索引范围。

    2、空指针异常

    在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,

    则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常

     1public class ArrayDemo07 {
     2    public static void main(String[] args) {
     3        int[] arr = new int[3]; // 定义一个长度为3的数组
     4        arr[0] = 5; // 为数组的第一个元素赋值
     5        System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
     6        arr = null; // 将变量arr置为null
     7        System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
     8    }
     9}

    通过上图所示的运行结果可以看出,上述代码中第4、5行代码都能通过变量arr正常地操作数组。

    第6行代码将变量置为null,当第7行代码再次访问数组时就出现了空指针异常NullPointerException。

    五、二维数组

    1、定义方式:

    int[][] arr1=new int[3][4];//方式1
            int[][] arr2=new int[3][];//方式2
            arr2[0]={1,2,3,4,5};
            arr2[1]={4};
            arr2[2]={23,123,2345}
            int[][] arr3={{1,2,3}{2,3}{6}};//方式3

    2、二维数组遍历

    for(int i=0;i<arr.length;i++){
                for(int j=0;j<arr2[i].length;j++){
                    System.out.print(arr2[i][j]+"");
                }
                System.out.println();

    3、二维数组内存图解:

    练习1:

    第一小组销售额为{11, 12}万元

    第二小组销售额为{21, 22, 23}万元

    第三小组销售额为{31, 32, 33, 34}万元。

    求:

    公司三个销售小组中每个小组的总销售额以及整个公司的销售额

    int[][] arr={{11,12},{21,22,23},{31,32,33,34}};
            int a=0;
            int count=0;
            for(int i=0;i<arr.length;i++){
                for(int j=0;j<arr[i].length;j++){
                    count=count+arr[i][j];
                }
                System.out.println("第"+(i+1)+"组销售总额:"+count);
                a+=count;
                count=0;
            }
            System.out.println("总销售额:"+a);

    练习2:

    随机点名

    import java.util.Random;
    class  demo2
    {
        public static void main(String[] args) 
        {
            String[] str={"A","B","C",D","E","F","G","H","I","J","K"};
            Random r=new Random();
            int index=r.nextInt(str.length);
            System.out.println(str[index]);
        }
    }

    例题:

    1.编写代码实现如下内容:if语句实现考试成绩分等级(使用switch语句)。
    [90-100] A等。
    [80-90) B等。
    [70-80) C等。
    [60-70) D等。
    [0-60) E等。
    请根据给定成绩,输出对应的等级。
    说明:"["表示包含,")"表示不包含

    //第一题
            Scanner sum=new Scanner(System.in);
            int sss=sum.nextInt();
            int sc=(int)sss / 10;
            switch(sc){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("等级是E等");
                break;
            case 6:
                System.out.println("等级是D等");
                break;
            case 7:
                System.out.println("等级是C等");
                break;
            case 8:
                System.out.println("等级是B等");
                break;
            case 9:
            case 10:
                System.out.println("等级是A等");
                break;
            default:
                break;
            }

    2.分析以下需求,并用代码实现:

    (1)根据工龄(整数)给员工涨工资(整数),工龄和基本工资通过键盘录入

    (2)涨工资的条件如下:

    [10-15)     +5000

    [5-10)      +2500

    [3~5)       +1000

    [1~3)       +500

    [0~1)       +200

    (3)如果用户输入的工龄为10,基本工资为3000,程序运行后打印格式"您目前工作了10年,基本工资为 3000元, 应涨工资 5000

    元,涨后工资 8000元"

    //第二题
            Scanner shuru=new Scanner(System.in);
            int age=shuru.nextInt();
            int money=shuru.nextInt();
            switch(age){
            case 0:
                System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资200元,涨后工资"+(money+200)+"元");
                break;
            case 1:
            case 2:
                System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资500元,涨后工资"+(money+500)+"元");
                break;
            case 3:
            case 4:
                System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资1000元,涨后工资"+(money+1000)+"元");
                break;
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资2500元,涨后工资"+(money+2500)+"元");
                break;
            case 10:
            case 11:
            case 12:
            case 13:
            case 14:
                System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资5000元,涨后工资"+(money+5000)+"元");
                break;
            default:
                break;
            }
  • 相关阅读:
    怎样使用两行代码实现博客园打赏功能
    使用vue开发微信公众号下SPA站点的填坑之旅
    贝叶斯公式与最大后验估计(MAP)
    多元高斯分布(The Multivariate normal distribution)
    Jacobian矩阵、Hessian矩阵和Newton's method
    导数、方向导数与梯度
    解决只有单引号的Json格式转换成bean问题
    浅析Java中的final关键字
    观察者模式/ java实现附代码 /
    Java内存区域与内存溢出异常
  • 原文地址:https://www.cnblogs.com/Ace-suiyuan008/p/9330736.html
Copyright © 2020-2023  润新知