Java基础知识五(数组)

Java基础知识(五)

数组的概述

1、数组:存储相同数据类型的容器

2、没有数组的情况

​ 如果需要定义多个数据,只能int a,int b一直进行定义,而且数据和数据之间没有关系,只能通过变量名进行获取,非常的不方便

3、有数组的情况

​ 如果需要定义多个数据,可以创建一个容器,将数据存储到容器里面,数组里面都是有索引的,通过数组名和有规律的索引去访问到每一个元素,这个容器就是数组

​ 通过有规律的索引去访问没有规律的元素

数组的定义

1、格式

元素的数据类型[] 数组名称 = new 元素的数据类型[数组的长度];

int[] arr = new int[3];

2、解释

​ 1、元素代表数组存储的数据

​ 2、元素的数据类型,数据存储数据的类型

​ 3、[] 代表的是一位数组

​ 4、数组名称,合法的标识符,给变量取名,第一个单词全部小写,从第二个单词开始,首字母大写,其他字母小写

​ 5、= 赋值符号,将右边的数据赋值给左边的变量

​ 6、new 数组是一个引用类型,存储在堆内存里面,new 就相当于在堆内存里面开辟一段空间

​ 7、第二个元素的数据类型要跟第一个元素的数据类型保持一致

​ 8、数组的长度:定义数组的大小,如果定义为3,数组只能存储三个元素

​ 9、元素一旦创建,长度是不可以改变的

3、直接打印数组的结果 [I@15db9742

​ 1、数组是一个引用类型,直接打印的话打印的是数组的地址,而不是数组中元素的值

​ 2、[ 代表的是一位数组

​ 3、I 数组的类型是int

​ 4、@ 代表普通的分隔符

​ 5、15db9742: 通过hashcode方法算出的哈希值,在转成16进制的数字

​ 6、以后给这一串数字和符号叫做数组的地址

class Demo01_数组的定义 {
    
    

	public static void main(String[] args) {
    
    
		//定义一个数组
		int[] arr = new int[3];
		System.out.println(arr);
		
	}
}

数组的初始化

1、初始化:在创建数组的时候进行初始化,jvm好分配多大的内存空间

2、分类

​ 1、动态的初始化

​ 2、静态的初始化

3、动态初始化

​ 1、创建数组的时候并不知道要给元素赋什么值,等创建数组完毕的时候,在对数组的元素进行一一赋值

​ 2、元素的数据类型[] 数组名称 = new 元素的数据类型[数组的长度];

​ int[] arr = new int[3];

​ 3、数组的长度一定要给,数组创建好之后,长度是不能改变的

​ 4、数组的赋值 通过数组名和索引相结合的方式进行赋值

​ 5、索引:下标、角标 从0开始,到数组的长度-1结束

​ 第一个元素的索引是0,第二个元素的索引1 最后一个元素的索引是长度-1

​ 6、数组名[索引] = 要赋的值;

​ 7、如果是int类型的数组元素没有进行赋值,默认值就是0

4、静态初始化

​ 1、在创建数组的时候,就叫里面的元素进行赋值

​ 2、格式

​ 元素的数据类型[] 数组名称 = new 元素的数据类型[]{元素的罗列};

​ int[] arr = new int[] {2,5,7};

​ 3、元素罗列的数据类型必须跟前面声明的元素数据类型保持一致

​ 4、元素的罗列通过逗号进行分割,最后一个元素不要给逗号

​ 5、=号后面的中括号千万不要给长度

​ 6、静态初始化的简写格式

​ 元素的数据类型[] 数组名称 = {元素的罗列};

​ int[] arr = {1,2,3};

​ 7、如果使用简写的方式,不能将数组的声明和数组的赋值分类开来

​ int[] arr; arr = new int[]{1,2,3}; 正确

​ int[] arr; arr = {1,2,3}; 错误

class Demo02_动态初始化 {
    
    

	public static void main(String[] args) {
    
    
		//动态初始化
		int[] arr = new int[3];
		//打印第一个元素   数组名[索引]
		System.out.println(arr[0]);
		//打印第二个元素
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		//对数组中的元素进行赋值 
		arr[0] = 100;
		arr[1] = 200;
		arr[2] = 300;
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);

		
	}
}

class Demo03_静态初始化 {
    
    

	public static void main(String[] args) {
    
    
		//静态初始化
		int[] arr = new int[]{
    
    1,2,3};
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		//对元素进行重新赋值
		arr[0] = 100;
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);

		//静态初始化的简写格式
		int[] arr1 = {
    
    2,3,4};
		System.out.println(arr1[0]);
		System.out.println(arr1[1]);
		System.out.println(arr1[2]);
		System.out.println("---------------------------------");
		
		/*int a; 变量的声明
		a = 10; 变量的赋值*/
		//数组的声明
		int[] arr2;
		//对数组进行赋值
		arr2 = new int[] {
    
    2,3,4};
		System.out.println(arr2[0]);
		//如果使用简写的格式,不能将数组的声明和赋值分离开来
		/*int[] arr3;
		arr3 = {1,2,3};  错误*/
	}
}

数组的遍历

1、遍历:一个一个的去经历元素,每个元素都访问一遍

2、索引,下标、角标、脚标

​ 1、从0开始,到arr.长度-1结束

​ 2、获取数组的长度:数组名称.length

​ 3、访问对应索引的元素:数组名称[对应的索引]

class Demo06_数组的遍历 {
    
    

	public static void main(String[] args) {
    
    
		//使用静态初始化的简写方式
		int[] arr = {
    
    1,2,3,4,5,6,7,84,900,10,11};
		//对数组进行遍历,一个个访问里面的元素    .length
		for(int i = 0; i <= arr.length - 1; i++) {
    
    
			System.out.print(arr[i] + "...");
		}
		System.out.prinln();
	}
}

数组中容易出现的两个异常

1、异常:程序中的错误,当程序出现了跟生活中不符合的情况,没有必要让程序继续运行下去了,就抛出异常,让程序进行停止

2、两个异常

​ 数组索引越界异常

​ 空指针异常

3、数组索引越界异常

4、异常的原因

​ 数组定义好之后,索引的范围0----arr.length - 1,访问了除了0—arr.length-1之外的索引,就会发生数组索引越界异常

5、避免

​ 不访问奇奇怪怪的索引,只访问0----arr.length - 1的索引

6、空指针异常

[
7、发生异常的原因

​ null表示栈内存的引用不指向堆内存的任何数据,还强行去访问数组中的元素,只能报一个空指针异常

​ 指针:在java中是不能直接操作内存的,c语言可以直接操作内存,通过hashcode算出的数字进行封装,以后就把这串数字叫做引用类型的地址

8、避免空指针异常

​ 判断是否为空,如果不为空的时候,我才去访问数组中的元素,是空的话,就不进行访问

求一个数组的最大值

1、定义一个数组: int[] arr = {2,3,41,45,6789,45};求出这个数组的最大值

2、步骤

​ 定义一个变量表示最大值,默认第一个元素就是最大值

​ 循环变量数组,从第二个元素开始,跟最大值进行比较,如果它比最大值还要打,它就是最大值

​ 循环遍历结束之后,max就是最大值

class Demo09_求数组的最大值 {
    
    

	public static void main(String[] args) {
    
    
		
		int[] arr = {
    
    -1,-12,-234,-456,-789,-2000};
		//定义变量max
		int max = arr[0];
		//遍历arr
		for(int i = 1; i <= arr.length - 1; i++) {
    
    
			//让arr[i]跟max进行比较
			if(arr[i] > max) {
    
    
				max = arr[i];
			}
		}
		System.out.println(max);
	}
}

查找指定元素的索引

1、给定一个数组(元素没有相同的),给定一个数,找出这个数在该数组中的位置

要求:将该功能定义成方法

import java.util.Scanner;
class Demo10_找出指定数在数组中的位置 {
    
    

	public static void main(String[] args) {
    
    
		//定义一个数组
		/*int[] arr = {1,2,3,45,56,78};
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		int n = sc.nextInt();
		//遍历数组
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] == n) {
				System.out.println(i);
				return;
			}
		}
		System.out.println("没有该数字");*/




		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		int n = sc.nextInt();
		int[] arr = {
    
    1,2,3,45,56,78};
		int index = getIndex(arr,n);
		System.out.println(index == -1 ? "找不到该元素" : index);
	}

	/*
		参数列表   数组     n
		返回值   索引  int
	*/
	public static int getIndex(int[] arr, int n) {
    
    
		for(int i = 0; i <= arr.length - 1; i++) {
    
    
			if(arr[i] == n) {
    
    
				return i;
			}
		}
		//找不到return -1
		return -1;
	
	}
}

猜你喜欢

转载自blog.csdn.net/lizicheng1996/article/details/113144634
今日推荐