输入数据
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,..},..};