Java数组整理

本文详细介绍了Java中的Scanner类用于用户输入的基本用法,包括接收数字和字符串。接着,文章深入讲解了数组的定义、初始化、遍历、获取最大值以及异常处理,特别强调了数组越界和空指针异常。最后,讨论了二维数组的定义和遍历,并给出了相应的代码示例。总结了数组的关键概念和常见问题。
摘要由CSDN通过智能技术生成
输入数据

Scanner类
Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据。
Scanner使用步骤:
导包: import java.util.Scanner;
创建对象实例: Scanner sc = new Scanner(System.in);
调用方法:
int i = sc.nextInt(); 用来接收控制台录入的数字
String s = sc.next(); 用来接收控制台录入的字符串

import java.util.Scanner;     //——————————————————————————————————
public class ScannerDemo {
	public static void main(String[] args) {
		//创建Scanner引用类型的变量
		Scanner sc = new Scanner(System.in);  //—————————————————— 
		//获取数字
		System.out.println("请输入一个数字");
		int n = sc.nextInt();
		System.out.println("n的值为" + n);
		//获取字符串
		System.out.println("请输入一个字符串");
		String str = sc.next();   //——————————————————————————————
		System.out.println("str的值为" + str);
	}
}

数组定义+初始化

定义数组:
定义一个int类型的数组,数组名是arr
定义一个int类型的变量,变量名是arr数组

在这里插入图片描述

int[] x;              // 声明一个int[]类型的变量
x = new int[100];  // 创建一个长度为100的数组
数据类型[ ] 数组名 = new 数据类型[元素个数或数组长度];

内存分配:

在这里插入图片描述

1、类型[] 数组名 = new 类型[]{元素,元素,……};
2、类型[] 数组名 = {元素,元素,元素,……};      //第二种更方便
 1	public class ArrayDemo03 {
 2		public static void main(String[] args) {
 3			int[] arr = { 1, 2, 3, 4 }; // 静态初始化
 4			// 下面的代码是依次访问数组中的元素
 5			System.out.println("arr[0] = " + arr[0]);
 6			System.out.println("arr[1] = " + arr[1]);
 7			System.out.println("arr[2] = " + arr[2]);
 8			System.out.println("arr[3] = " + arr[3]);
 9		}
 10	}

数组遍历

在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案例来学习如何使用for循环来遍历数组

public class ArrayDemo04 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
		// 使用for循环遍历数组的元素
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]); // 通过索引访问元素
		}
	}
}
数组获取最大值

在操作数组时,经常需要获取数组中元素的最值。接下来通过一个案例来演示如何获取数组中元素的最大值

public class ArrayDemo05 {
	public static void main(String[] args) {
		int[] arr = { 4, 1, 6, 3, 9, 8 }; // 定义一个数组
int max = arr[0];               // 定义变量max用于记住最大数,首先假设第一个元素为最大值
		 // 下面通过一个for循环遍历数组中的元素
		for (int x = 1; x < arr.length; x++) {
			if (arr[x] > max) { // 比较 arr[x]的值是否大于max
				max = arr[x]; // 条件成立,将arr[x]的值赋给max
			}
		}
		System.out.println("max=" + max); // 打印最大值
	}
}

上述代码中,定义了一个临时变量max,用于记住数组的最大值。通过for 循环获取数组中的最大值,赋值给max变量。

首先假设数组中第一个元素arr[0]为最大值,然后使用for循环对数组进行遍历,在遍历的过程中只要遇到比max值还大的元素,就将该元素赋值给max。这样一来,变量max就能够在循环结束时记住数组中的最大值。需要注意的是,在for循环中的变量i是从1开始的,这样写的原因是程序已经假设第一个元素为最大值,for循环中只需要从第二个元素开始比较,从而提高程序的运行效率。

数组异常

数组越界异常
每个数组的索引都有一个范围,即0~length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错,如下所示。

 1	public class ArrayDemo06 {
 2		public static void main(String[] args) {
 3			int[] arr = new int[4]; // 定义一个长度为4的数组
 4			System.out.println("arr[0]=" + arr[4]); // 通过角标4访问数组元素
 5		}
 6	}

上图运行结果中所提示的错误信息是数组越界异常ArrayIndexOutOfBoundsException,出现这个异常的原因是数组的长度为4,其索引范围为0~3,而上述代码中的第4行代码使用索引4来访问元素时超出了数组的索引范围。

数组索引异常
在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常,接下来通过一个案例来演示这种异常,如下所示。

 1	public class ArrayDemo07 {
 2		public static void main(String[] args) {
 3			int[] arr = new int[3]; // 定义一个长度为3的数组
 4			arr[0] = 5; // 为数组的第一个元素赋值
 5			System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
 6			arr = null; // 将变量arr置为null
 7			System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
 8		}
 9	}

通过上图所示的运行结果可以看出,上述代码中第4、5行代码都能通过变量arr正常地操作数组。第6行代码将变量置为null,当第7行代码再次访问数组时就出现了空指针异常NullPointerException。

二维数组

二维数组的定义有很多方式,接下来针对几种常见的方式进行详细地讲解,具体如下:

第一种方式

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

在这里插入图片描述

第二种方式

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

在这里插入图片描述

第二种方式和第一种类似,只是数组中每个元素的长度不确定,接下来通过一个图来表示这种情况,如图所示。

第三种方式

int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

上面的二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、在这里插入图片描述
{7,8,9},接下来通过一个图来表示这种情况,如图2-54所示。
在这里插入图片描述

二维数组遍历

class ArrayDemo09 {
	public static void main(String[] args){
		//一维数组的求累加和并遍历
		int[] arr = {10,20,30,40,50};
		int sum = 0; 
		for (int i=0; i<arr.length; i++) {
              //System.out.println(arr[i]);
			sum += arr[i];
		}
		System.out.println("sum= " + sum);
		System.out.println("---------------------");
		
//二维数组的求累加和并遍历
		int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} };
		int sum2 = 0;
		for (int i=0; i<arr2.length; i++) {
			for (int j=0; j<arr2[i].length; j++) {
                 //System.out.println(arr2[i][j])
				sum2 += arr2[i][j];
			}
		}
		System.out.println("sum2= "+ sum2);
	}
}

总结

 数组
 它是一个用来存储同一个数据类型多个元素的一个容器(数组长度是固定的,数组中存储的元素的数据类型要求一致)
 格式:

	       格式1:
				数据类型[] 数组名 = new 数据类型[数组长度];
			
			格式2:
				数据类型[] 数组名 = new 数据类型[]{元素值1,元素值2,..};
				
			格式3:
				数据类型[] 数组名 = {元素值1,元素值2,..};

 数组操作的常见问题:
NullPointerException: 空指针异常
ArrayIndexOutOfBoundsException: 数组越界异常
 二维数组:
 它是一个包含多个一维数组的数组
 特点:二维数组中的每个元素都是一个一维数组
 格式:

	       格式1:
				数据类型[][] 数组名 = new 数据类型[m][n];
			    m: 代表二维数组中一维数组的个数
				 n: 代表每个一维数组中元素的个数
			格式2:
				数据类型[][] 数组名 = new 数据类型[m][];	
				m: 代表二维数组中一维数组的个数
				每一个一维数组通过赋值来确定数组长度
			格式3:
				数据类型[][] 数组名 = {{元素值1,元素值2,..},{元素值1,元素值2,..},..};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值