JAVA基础(7)-数组

目录

数组:

       1、概念

       2、名称

       3、元素的概念

       4、数组的声明与初始化

       5、数组的长度

       6、数组的下标

       7、数组元素的访问

       8、数组元素的覆盖(赋值,替换)

       9、数组间的赋值

       10、数组下标越界异常

       11、引用类型之Arrays

       12、数组的复制


数组:


       1、概念

                        一组相同类型的数据的组合,数组也是一种引用类型。

                       数组的特点一经创建,长度不可变。


       2、名称

                       数组名称不是固定的,与存放的数据的类型有关。
                       如:  存放一组int类型的数据,数组名称   int[ ]
                              存放一组字符串数据,数组名称   String[ ]
                              存放一组Scanner类型的数据,数组名称   Scanner[ ]
                              存放一组字符类型的数据,数组名称   char[ ]

       3、元素的概念


                          数组中的每个数据,都是这个数值的元素。

       4、数组的声明与初始化

                          声明元素类型[]  变量名;
                                     元素类型   变量名[];       (不建议此写法)
                          变量初始化的时机:2种
                                    (1)声明时直接初始化
                                    (2)先声明,再初始化(使用前初始化)
                          数组的变量初始化:3种情况
                                    (1)静态初始化
                                            String[] names = {"A","B"};
                                            int[] nums = {};

                                    (2)动态初始化
                                            --规定数组长度的写法
                                            int[] ages = new int[length];  //length数组初始的长度
                                           动态初始化的数组其实有默认元素
                                                  整数类型:默认是0
                                                  浮点数类型:默认0.0
                                                  字符类型:默认'\u0000'
                                                  布尔类型:默认false
                                                  引用数据类型:默认值null

                                           --不规定长度的写法
                                                  int[] ages = new int[]{};
                                                  double[] counts = new double[]{1.2,3.14};

       5、数组的长度

                            即数组元素的个数
                            表示方式:变量名.length;

       6、数组的下标

                            下标从0开始,最后一个元素的下标为:length-1;
                            下标范围:0~length-1

       7、数组元素的访问

                            通过下标进行查看
                            语法:变量名[index];        //index要访问的数组元素下标
                           数组元素的遍历(从头到尾依次查看)
                                for(int i=0;i<变量名.length;i++){
                                      System.out.println(变量命[i]);
                                }

       8、数组元素的覆盖(赋值,替换)

                           语法:变量名[index] = value;

       9、数组间的赋值

                           就是指数组中变量之间的赋值。通过一个变量对数组的元素进行修改,那么与之相关的变量对应的数组的元素也会发生变化。

                           如:
                                int[] a = {1,2,3};
                                int[] b = a;
                               通过修改b数组中的元素值,a对应的数组也跟着改变

       10、数组下标越界异常

                                异常的提示内容:java.lang.ArrayIndexOutOfBoundsException

                                出现的原因:访问数组元素时的下标超出了范围
                                正确范围:0~length-1
                                错误下标:
                                            变量名[-1]
                                            变量名[length]

练习代码:

public static void main(String[] args){
		int[] scores = {1,2,10,100};
		System.out.println(fs[5]);
		/* 数组下标越界异常,编译器检查不出来此异常
		   运行时才会出现,出现的结果造成了程序的中断结束。
		*/
		System.out.println("over");
	}

       11、引用类型之Arrays

                是数组的工具类。此类提供了很多对数组操作的功能方法
                如:
                   String info = Arrays.toString(数组名);
                   Arrays.toString():
此方法是将数组的元素拼接成String字符串.
                  拼接后的格式如下:
                         "[元素1,元素2,.....元素length-1]"

练习代码:

public static void main(String[] args){
		int[] scores = {1,2,10,100};
		System.out.println(Arrays.toString(scores));
}

       12、数组的复制

                          系统复制法:
                                 System.arraycopy(src,start1,des,start2,length);
                                 src:源数组,即被复制的数组名
                                 start1:源数组复制的开始下标
                                 des:目标数组,即复制到的数组名
                                 start2:目标数组复制的开始下标
                                 length:复制的长度

                          工具类提供的复制方法:
                                 元素类型[] 变量名=Arrays.copyOf(src,newLength);
                                 src:源数组
                                 newLength:新数组的长度

                                 功能解释:从src的下标为0的元素开始复制,复制到长度为newLength的新数组中,新数组存放元素的开始位置为0

练习代码:

public static void main(String[] args){
		int[] nums = {99,100,98,99,100};
		
		
		/* 创建一个数组num2,存储元素
			1000,99,100,98,99,100
		*/
		int[] num2 = new int[6];
		num2[0] = 1000;
		System.arraycopy(nums,0,num2,1,nums.length);
		System.out.println("num2:"+Arrays.toString(num2));
		
		int[] num1 = Arrays.copyOf(nums,5);
		System.out.println(Arrays.toString(num1));
		/* 创建一个int类型的num2,长度为10,前五个元素
			为num1的内容。
		*/
		int[] num2 = Arrays.copyOf(num1,10);
		System.out.println(Arrays.toString(num2));
	}

练习题:创建一个长度为n [50,100]的字符数组,随机存储n个小写的英文字母,然后统计每个字母出现的次数。

public static void main(String[] args) {
		int[] num = new int[26];
		int n = (int)(Math.random()*51+50);		
		char[] strs = new char[n];
		for (int i = 0; i < strs.length; i++) {
			strs[i] = (char) (Math.random()*26+97);
			for(int j=97;j<=122;j++){
				if((char)j==strs[i]){
					num[j-97]++;
				}
			}
			System.out.print(strs[i]+"  ");
			if((i+1)%10==0)
				System.out.println();
		}
		System.out.println("\n总共生成"+n+"个字母,其中:");
		for (int i = 0; i < num.length; i++) {
			System.out.print((char)(i+97)+"出现了"+num[i]+"次   ");
			if((i+1)%5==0){
				System.out.println();
			}
		}
	}

二维数组

       二维数组的初始化:
              静态初始化
                  如:int[][] a = {{1},{1,2},{2,3,4}};
              动态初始化:
                  (1)等长式初始化
                           int[][] a = new int[3][2];
                           表示a有三个元素,每个元素都是2个长度的数组。
                  (2)只规定高维数组的长度
                           int[][] a = new int[3][];
                          表示a有三个元素,但是都是null,null在使用时,需要新建数组对象(长度任意)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值