韩顺平零基础30天学会Java笔记(五)——数组

数组介绍

数组可以存放多个同一类型的数据。
数组也是一种数据类型,是引用类型。

数组的使用

double[] hens = {3, 5, 1, 3.4, 2, 50};
//double[] 表示这是一个double类型的数组

double sum = 0;
//遍历数组得到所有元素的和
for (int i=0; i<hens.length; i++){   //hens.length是数组的长度
	//下标从0开始编号,第一个元素是hens[0]
	System.out.println("第" + (i+1) + "个元素的值是" + hens[i]);
	sum += hems[i];
	System.out.println("总重量为" + sum + ",平均重量为" + (sum / hens.length));
}

使用方式1:动态初始化

1.数组的定义
数据类型 数组名[] = new 数据类型[大小]

int a[] = new int[5];  
//创建一个名字为a的数组,存放5个int类型元素

2.数组的引用(使用/访问/获取元素)
数组名[下标/索引]
a[2]表示使用a数组的第三个数

public static void main(String[] args) {
        double scores[] = new double[5];

        //输入
        Scanner sc = new Scanner(System.in);
        for (int i=0; i<scores.length; i++){
            System.out.print("请输入第" + (i+1) + "个元素的值:");
            scores[i] = sc.nextDouble();
        }

        //输出
        System.out.println("数组的元素为:");
        for (int j = 0; j<scores.length; j++){
            System.out.println("第" + (j+1) + "个元素的值为" + scores[j]);
        }
    }

使用方式2:动态初始化

1.声明数组
数据类型 数组名[];
或 数据类型[] 数组名;
2.创建数组
数组名 = new 数据类型[大小];

double scores[];  //声明数组,这时scores是NULL
scores = new double[5];  //分配内存空间

使用方式3:静态初始化

1.初始化数组
已知数组元素数量和具体值。
数据类型 数组名[] = {元素值,元素值…}
2.用法

int a[] = {1,2,3,4,5};
//相当于
//int a[] = new int[5];
//a[0] = 1;
//a[1] = 2;
//a[2] = 3;
//a[3] = 4;
//a[4] = 5;

数组的使用细节

1.数组是多个相同类型数据(或可以自动类型转换)的组合,实现对这些数据的统一管理。
2.数组的下标从0开始。
3.数组属于引用类型,数组型数据是对象(object)。
4.数组创建后如果没有赋值,会赋默认值:
int 0 | short 0
byte 0 | long 0
float 0 | double 0.0
char \u0000 | boolean false
String null

两个基础练习

1.创建一个char类型的26个元素的数组,分别放置A-Z,使用for循环访问所有元素并打印出来。

    public static void main(String[] args) {
        //创建一个数组放置A-Z并打印
        char[] chars = new char[26];
        for (int i=0; i<chars.length; i++){
            chars[i] = (char)('A' + i);
        }

        for (int i=0; i<chars.length; i++){
            System.out.print(chars);
        }
    }

2.求出一个数组int[]的最大值{4,-1,9,10,23},并得到对应的下标。

    public static void main(String[] args) {
        //求出一个数组的最大值{4,-1,9,10,23}和对应的下标
        int[] arr = {4, -1, 9, 10, 23};
        int temp = 0;
        int index = 0;
        for (int i=0; i<arr.length; i++){
            if (arr[i] > temp){
                temp = arr[i];
                index = i;
            }
        }
        System.out.println("最大值为:"+temp);
        System.out.println("最大值的下标为:"+index);
    }

数组赋值机制

1.基本数据类型赋值,这个值就是具体的数据,而且相互不影响,赋值方式为值拷贝。
2.数组赋值在默认情况下是引用传递,赋的值是地址

int n1 = 10;
        int n2 = n1;
        n2 = 80;
        System.out.println("n1:"+n1);  //10
        System.out.println("n2:"+n2);  //80

        int[] arr1 = {1, 2, 3};
        int[] arr2 = arr1;
        arr2[0] = 10;

        System.out.println("arr1:");
        for (int i=0; i<arr1.length; i++){
            System.out.println(arr1[i]);  //10  2  3
        }

值拷贝和地址拷贝的区别
3.对数组进行值拷贝,需要新创建一个数组,开辟新的数据空间

int[] arr1 = {1, 2, 3};
        int[] arr2 = new int[3];

        for (int i=0; i<arr2.length; i++){
            arr2[i] = arr1[i];
        }
        arr1[0] = 100;

        System.out.println("arr1为:");
        for (int i=0; i<arr1.length; i++){
            System.out.println(arr1[i]);  //100  2  3
        }

        System.out.println("arr2为:");
        for (int i=0; i<arr2.length; i++){
            System.out.println(arr2[i]);  //1  2  3
        }

数组值拷贝

数组反转

		int[] arr = {1, 2, 3, 4, 5, 6};
        int[] rearr = new int[6];

        //方法一
        for (int i=0; i<rearr.length; i++){
            rearr[i] = arr[(rearr.length-1)-i];
            System.out.println(rearr[i]);
        }


        //方法二
        for (int i=0; i<arr.length/2; i++){
            int temp = arr[arr.length-1-i];
            arr[arr.length-1-i] = arr[i];
            arr[i] = temp;
        }
        for (int i=0; i<arr.length; i++){
            System.out.println(arr[i]);
        }


		//方法三
        for (int i=arr.length-1, j=0; i>=0; i--, j++){
            //逆序遍历
            rearr[j] = arr[i];
        }
        arr = rearr;
        //让arr指向rearr数据空间
        // 此时arr原来的数据空间就没有变量引用了,会被销毁
        for (int i=0; i<arr.length; i++){
            System.out.println(arr[i]);
        }

数组扩容

实现动态地给数组添加元素,原始数组静态分配。

public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        Scanner sc = new Scanner(System.in);

        do{
            int[] newarr = new int[arr.length + 1];
            for (int i=0; i<arr.length; i++){
                newarr[i] = arr[i];
            }

            System.out.print("请输入你要添加进数组的数字:");
            int newint = sc.nextInt();
            newarr[newarr.length-1] = newint;
            arr = newarr;

            System.out.println("当前数组元素有:");
            for (int i=0; i<newarr.length; i++){
                System.out.print(newarr[i] + " ");
            }

            System.out.print("\n是否继续添加?(y/n):");
            char yesno = sc.next().charAt(0);
            if (yesno == 'n'){
                System.out.println("退出程序。");
                break;
            }
        }while (true);

    }

数组缩减

将数组进行缩减,每次缩减最后一个元素,当只剩下一个元素时提示不能缩减。

public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        Scanner sc = new Scanner(System.in);

        System.out.println("当前数组元素有:");
        for (int i=0; i<arr.length; i++){
            System.out.print(arr[i]+" ");
        }

        do{
            System.out.println("\n正在删除最后一个元素......");
            int[] newarr = new int[arr.length-1];
            for (int i=0; i<newarr.length; i++){
                newarr[i] = arr[i];
            }
            arr = newarr;

            System.out.println("删除成功,当前数组元素有:");
            for (int i=0; i<newarr.length; i++){
                System.out.print(newarr[i]+" ");
            }

            System.out.print("\n是否继续删除?(y/n):");
            char yesno = sc.next().charAt(0);
            if (yesno == 'n'){
                System.out.println("退出程序。");
                break;
            }else if (newarr.length == 1){
                System.out.println("数组只剩下最后一个元素,无法继续缩减。");
                break;
            }

        }while (true);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值