今日内容
1.为什么要有数组?
如果需要存储多个变量,用定义变量的方式就太麻烦了
可以定义一个数组,一个数组可以存储相同类型的多个变量
2.数组的定义
动态初始化
数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[7];
静态初始化
数据类型[] 数组名 = new 数据类型[]{数据,数据,数据};
简化:a
数据类型[] 数组名 = {数据,数据,数据};
数组的特点:
1.一个数组只能存相同类型的数据
2.数组一旦创建长度就固定了,不能改变
3.索引和元素
元素:
元素就是数组里面的每个数据
索引:
索引就是每个数据的位置,索引永远从0开始
4.数组的两个常见问题
索引越界:
如果操作了范围外的索引,就会出现索引越界异常
ArrayIndexOutOfBoundsException
int[] arr = {11,22,33};
System.out.println(arr[3]);
空指针:
如果给数组赋值为null,表示数组为空,只要操作数组的元素就会出现空指针异常
NullPointerException
int[] arr = null;
System.out.println(arr[3]);
5.数组的遍历
public class Demo03 {
public static void main(String[] args) {
//定义数组
int[] arr = {11,22,33,44,66,77};
//一
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println(arr[5]);
//二
for (int i = 0; i < 6; i++) {
System.out.println(arr[i]);
}
//三 数组名.length 代表数组的长度
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
6.数组的内存图
6.1一个数组的内存图
6.2两个数组的内存图
6.3两个变量指向同一个数组内存图
7.数组的练习
7.1打印大于等于130的元素
package com.itheima02;
public class Demo01 {
public static void main(String[] args) {
//定义数组
int[] arr = {120,130,110,125,128,164};
//打印大于等于130的数字
//遍历
for (int i = 0; i < arr.length; i++) {
//判断
if(arr[i] >= 130){
//打印
System.out.println(arr[i]);
}
}
//注意事项, 遍历的时候 i 是索引 arr[i] 是元素
}
}
7.2求数组的元素和
package com.itheima02;
public class Demo02 {
public static void main(String[] args) {
//定义数组
int[] arr = {120,130,110,125,128,164};
//求和
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
//打印
System.out.println(sum);
}
}
7.3求数组的元素平均数
package com.itheima02;
public class Demo03 {
public static void main(String[] args) {
//定义数组
int[] arr = {120, 130, 110, 125, 128, 164};
double sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println(sum / arr.length);
}
}
7.4求数组的最大值
package com.itheima02;
public class Demo04 {
public static void main(String[] args) {
//定义数组
int[] arr = {120, 130, 110, 125, 128, 164};
//定义变量
int max = arr[0];
//遍历
for (int i = 1; i < arr.length; i++) {
//比较
if(arr[i] > max){
//把max的值替换
max = arr[i];
}
}
//打印
System.out.println("最大值是:" + max);
}
}
7.5求大于等于130的元素个数
package com.itheima02;
public class Demo05 {
public static void main(String[] args) {
//定义数组
int[] arr = {120, 130, 110, 125, 128, 164};
//定义变量
int count = 0;
//遍历
for (int i = 0; i < arr.length; i++) {
//判断
if(arr[i]>=130){
count++;
}
}
//输出个数
System.out.println("一共有" + count + "个");
}
}
7.6键盘输入数组元素
package com.itheima02;
import java.util.Scanner;
public class Demo06 {
public static void main(String[] args) {
//定义一个长度为5的数组,数组的元素从键盘输入,最后再遍历打印数组
//创建数组
int[] arr = new int[5];
//创建对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入5个整数:");
//循环
for (int i = 0; i < arr.length; i++) {
//把键盘输入的数据放在数组中
int a = sc.nextInt();
arr[i] = a;
}
//遍历打印
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
7.7随机生成数组元素
package com.itheima02;
import java.util.Arrays;
import java.util.Random;
public class Demo07 {
public static void main(String[] args) {
//定义一个长度为5的数组, 数组的元素都是随机生成的1-100之间的数字,最后遍历打印数组
//定义数组
int[] arr = new int[5];
//创建随机数对象
Random r = new Random();
//循环5次
for (int i = 0; i < arr.length; i++) {
//生成随机数放在数组中
int a = r.nextInt(100)+1;
arr[i] = a;
}
//输出打印数组
//如果只是为了打印数组看结果,可以用 Arrays.toString(数组名)
System.out.println(Arrays.toString(arr));
}
}
疑难解答
如图所示,需要判断数组内的前后数字是否对称.
我的答案:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[7];
System.out.println("请录入7个整数");
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
boolean flag = false;
int i = 0;
int end = arr.length - 1;
while (i <= end) {
//验证是否相同,相同增加循环索引 加一 减一
if (arr[i] == arr[end]) {
i++;
end--;
flag = true;
} else {
flag = false;
break;
}
}
if (flag == true) {
System.out.println("进去了");
} else {
System.out.println("太紧了");
}
}