Java数组

数组属于引用数据类型

数组的声明

数组声明语法有
在这里插入图片描述
Java中推荐使用第一种方式。

	int[] arr1 ;
	float arr2[];

数组的初始化

初始化之后数组的长度就确定下来,不能再变化了。初始化分为两种,静态初始化和动态初始化。

静态初始化

就是将数组的元素放到大括号中,元素之间用逗号分隔。

package plus;
public class plus {
	public static void main(String[] args) {
	int[] arr1 = {12,34,56,67,89};
	String[] arr2 = {"张三","李四","王五","Mary","Tom"};
	}
}

动态初始化

静态初始化是在数组中每一个元素内容已知的情况下使用的。在很多情况下,不知道数组中元素的内容和多少,可以使用动态初始化方法。

语法格式为 new 元素数据类型[ 数组长度 ] ;

package plus;
public class plus {
	public static void main(String[] args) {
	int[] arr1 = new int[4];
	arr1[0] = 23;
	arr1[1] = 43;
	arr1[2] = 56;
	arr1[3] = 89;
	}
}

案例

package plus;
public class plus {
	public static void main(String[] args) {
	double[] arr1 = {3, 5, 1, 3.4, 2, 50};
	double sum = 0;
	for (int i = 0;  i<arr1.length; i++) {
		sum = sum + arr1[i];
	}
	double avg = 0;
	avg = sum/arr1.length;
    System.out.println(sum);
    System.out.println(avg);
	}
}

在这里插入图片描述

import java.util.Scanner;
public class array1 {
    //循环输入5个成绩,保存到double数组中并输出。
        public static void main(String[] args) {
            double[] arr1 = new double[5];
            Scanner myScanner= new Scanner(System.in);
            //循环输入
            for(int i = 0; i<arr1.length; i++ ) {
                System.out.println("请输入第" + (i + 1) + "个元素的值");
                arr1[i] = myScanner.nextDouble();
            }
            //循环输出
            for(int m = 0; m<arr1.length; m++){
                System.out.println(arr1[m]);
            }

        }
}
请输入第1个元素的值
1
请输入第2个元素的值
2
请输入第3个元素的值
3
请输入第4个元素的值
4
请输入第5个元素的值
5
1.0
2.0
3.0
4.0
5.0

Process finished with exit code 0
//创建一个包含26个英文字母的char类型的数组,输出出来
public class array2 {
    public static void main(String[] args) {
        char[] arr1 = new char[26];
        arr1[0] = 'A';
        for (int i = 0; i<26; i++){
            arr1[i] = (char)('A' + i);
            System.out.println(arr1[i]);
        }
    }
}

注意其中的强制类型转换。

//求一个int数组{4,-1,9,10,23} 并得到对应的下标
public class array3 {
    public static void main(String[] args) {
    int[] arr1 = {4, -1, 9, 10, 23};
    int max = 4;
    int maxIndex = 0;
    for(int i = 1; i<arr1.length; i++){
        if(arr1[i]>max){
            max = arr1[i];
            maxIndex = i;
        }
    }
        System.out.println(max);
        System.out.println(maxIndex);
    }
}

在这里插入图片描述

注意

  • 数组里的元素应该是相同类型的。但有可能有自动类型转换(小范围的数据转化为大范围的数据类型)。
  • 数组创建后,如果没有赋值,是有默认类型的。int、byte、short、long默认都是0;float、double都是0.0;char是\u0000;boolean是false;String是null。

数组赋值机制

public class array4 {
    public static void main(String[] args) {
        int n1 = 10;
        //赋值方式为值拷贝 ,n2的值改变,不会影响n1的值。
        int n2 = n1;
        n2 = 80;
        System.out.println("n1="+n1);
        System.out.println("n2="+n2);

        //数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用传递,传递的是地址。arr2的变化会影响到arr1
        int[] arr1 = {1,2,3};
        int[] arr2 = arr1;
        arr2[0] = 4;
        for(int i = 0; i<arr2.length; i++){
            System.out.println(arr2[i]);
            System.out.println(arr1[i]);
        }

    }
}
n1=10
n2=80
4
4
2
2
3
3

Process finished with exit code 0

Java的内存分为三大部分 栈、堆、方法区。

数组拷贝

将arr1的内容拷贝到arr2数据里面,要求数据空间是独立的

//将数组1的内容拷贝到数组2中,要求数据空间是独立的。
public class array5 {
    public static void main(String[] args) {
        int[] arr1 = {10,20,30};
        //先创建一个新的数组arr2,开辟新的数据空间
        int[] arr2 = new int[arr1.length];
        for(int i = 0; i<arr1.length; i++){
            arr2[i] = arr1[i];
        }
        for(int m = 0; m<arr2.length; m++) {
            System.out.println(arr2[m]);
        }
    }
}

在这里插入图片描述

数组翻转

要求把数字的元素内容反转

//要求把数组的元素内容反转
public class array6 {
    public static void main(String[] args) {
        int[] arr1 = {11,22,33,44,55,66};
        int[] arr2 = new int[arr1.length];
        for(int i = 0; i<arr1.length; i++){
            arr2[i] = arr1[arr1.length-i-1];
        }
        for(int m = 0;m< arr2.length;m++){
            System.out.println(arr2[m]);
        }
    }
}

66
55
44
33
22
11

Process finished with exit code 0

数组扩容

需求:实现动态的给数组添加元素效果
1)原始数组使用静态分配 int[] arr = {1,2,3}
2)增加的元素直接放在数组的最后
3)用户可以通过如下方法来决定是否继续添加 y/n

//需求:实现动态的给数组添加元素效果
//  1)原始数组使用静态分配 int[] arr = {1,2,3}
//  2)增加的元素直接放在数组的最后
//  3)用户可以通过如下方法来决定是否继续添加 y/n
import java.util.Scanner;
public class array7 {
    public static void main(String[] args) {
        int[] arr1 = {1,2,3};
        while(true){
            Scanner myscanner = new Scanner(System.in);
            System.out.println("是否继续添加 y/n");
            char str = myscanner.next().charAt(0);
            if (str =='n'){
                break;
            }else if (str == 'y'){
                System.out.println("请输入添加的元素");
                int num = myscanner.nextInt();
                int[] new_array = new int[arr1.length+1];
                for(int i = 0; i<arr1.length; i++){
                    new_array[i] = arr1[i];
                }
                new_array[new_array.length-1] = num;
                arr1 = new_array;
                for(int m = 0; m<new_array.length; m++){
                    System.out.println(new_array[m]);
                }
            }
        }
    }
}
是否继续添加 y/n
y
请输入添加的元素
2
1
2
3
2
是否继续添加 y/n
y
请输入添加的元素
6
1
2
3
2
6
是否继续添加 y/n
n

Process finished with exit code 0

数组缩减

有一个数组{1,2,3,4,5},可以将该数组进行缩减,提示用户是否继续缩减,每次缩减最后一个元素,当只剩下最后一个元素时,提示不能再缩减。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值