JavaSE学习笔记——day09——数组

day09

1、数组的概述

数组:是引用数据类型(类,数组,接口)

数组是底层的护具结构,几乎任何语言都有。

数组中的元素的数据类型必须一致

2、数组的应用场景

数组数组用来存储多个数据结构,比如单个成绩可以用单个变量来存储,多个就可以使用数组。

3、数组的特性

可以看作一个多种相同数据类型的一个容器,进行统一管理。

数组占用两块数据空间,栈内存保存地址,堆内存保存数据。

可以保存任意数据的元素,但同一个之内的类型必须相同。

长度不能直接更改,意味着数组一旦确定,不能添加和删除。除非新建一个数组,将内容复制进去,复制途中可以进行增加删除。

数组有一个length属性,保存数组的长度。

每个元素独有一个独一无二的下标,查找元素时只需要使用下标即可。

4、数组的声明

1、静态声明:在知道数组中每个元素的值的时候使用静态声明

数据类型 变量 [ ] = {};

int is [ ]={1,2,3}; 一维数组

int is [ ] [ ] ={{1},{1,2,3},{1,2}};

2、动态声明:在预先不知道元素的值的时候使用,需要指定电影长度。并使用默认值占位。

数据类型 变量 [ ] =new 数据类型 [ 长度 ];

int is [ ] = new int [10];

3、第三种声明方式

数据类型 变量 [ ] =new 数据类型 [ 长度 ]{数值};

5、基本操作

1、获取数据(查)

输出数组的长度:System.out.println(is.length);

输出指定元素:System.out.println(is.[下标值]);

输出尾元素:System.out.println(is.[length-1]);

2、设置数据(改)

is [1]=1; 把下标为1的第二位改为1.

3、遍历

for(int i = 1;i<is.length;i++){

System.out.println(is[ i ]);

}

6、常见异常

1、下标越界异常

比如一共就三个元素,你来个5.就是下标越界异常。

2、空指针异常

使用的null值。找不到地址所以会发现空指针异常。

注意:null和0是两个概念。

7、数组传递

传值和传引用的差别:

传值:基本类型传递,传出去之后不论怎么改变都不会影响

引用:引用类型传递,传出去的是地址,会受到改变的影响。

8、数组的复制

模拟插入式复制

  • 插入式复制,肯定需要更改长度大小,所以只能新建数组

  • 所以 需要把新数组返回

  • 1 新数组长度

  • 2 复制逻辑

  • 目标数组 起始位置和之前的数据 先复制到新数组中

  • 把源数组起始位置开始 复制length个,到新数组中

  • 目标数组 起始位置之后的数据 复制到新数组中

  • 3 返回新数组

9、接收命令行输入

public class Array_12 {
    public static void main(String[] args){
        //接收用户输入
        Scanner a = new Scanner(System.in);
        //程序执行到这里,就会进入等待状态等待用户输入数据
        //并把输入的数据返回给b,多个数据以空格隔开
        int b = a.nextInt();
        System.out.println(b);
    }
}

10、模拟计算器案例

public class Array_13 {
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        double a =s.nextDouble();
        String b = s.next();
        double c = s.nextDouble();
        sum1(a,b,c);
        }
    public static void sum1(double n1,String n2,double n3){
        double sum;
        switch(n2){
            case "+":
                sum=n1+n3;
            System.out.println(sum);
            break;
            case "-":
                sum=n1-n3;
            System.out.println(sum);
            break;
            case "*":
                sum=n1*n3;
            System.out.println(sum);
            break;
            case "/":
                sum=n1/n3;
            System.out.println(sum);
            break;
    }
}
}
​

11、交换变量的值

1、 中间变量(开发常用)

int x = 10; int y = 20; int temp = x; x = y; y = temp;

2 位移运算(面试常用) 转换为对应的二进制,然后每位进行异或 , 相同为0 不同为1 x = 2; y = 3; x = x ^ y; y = x ^ y; x = x ^ y; System.out.println(x+" : "+y);

3、加减运算 x = 10; y = 20; x = x + y; y = x - y; x = x - y; System.out.println(x+" : "+y);

12、冒泡排序

1 比较相邻的两个元素,如果第一个比第二个大,就交换位置

2 对每一对相邻的元素做 相同的比较工作,这样比较完一轮之后,最后一个元素一定是最大的

3 再重复执行上面的步骤,除了最后一个元素(比较次数依次递减)

4 一直到没有任何一对元素,终止

public class Array_15 {
    public static void main(String[] args) {
        int[] arr = {1,5,4,2,3};
        bubbleSort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    public static void bubbleSort(int[] arr){
        int count = 0;
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1-i ; j++) {
                count++;
                if (arr[j] < arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println("执行了 : "+count);
    }
}

 

13、选择排序

每次都把当中最小的放到左边

先拿出第一个,假设是最小的,然后挨个和后面所有比较,全部比较完之后,就找到了最小的元素,放到前面

public static void main(String[] args) {
        int[] arr = {1,5,4,2,3};
        selectSort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    
    public static void selectSort(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            int min = i;
            for (int j = i+1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            if (min != i) {
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i]=temp;
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值