【Java全栈学习笔记-U1-day06】数组
声明:Java全栈学习笔记是为整理当初学习Java时的学习笔记,以复习为目的而制作,仅提供大家交流学习,请勿用作他用
文章目录
day06 数组
文章目录
课程目标
-
理解数组
-
使用数组
-
数组的应用
插入算法实现
一、 数组(Array)
1.1什么是数组
数组是一个变量,用来存储一组相同数据类型的数据。
1.2 使用数组
public static void main(String[] args) {
//1.声明数组
//数据类型 [] 数组名称;
int [] maths;
//2.给数组分配内存空间
//数组名称 = new 数据额类型[数组长度];
maths = new int[4];
//3.数组赋值 注意:索引位置从0开始
//数组名[索引位置] = 值;
maths[0] = 5;
maths[1] = 10;
maths[2] = 15;
maths[3] = 20;
//4.获取数组中的值(元素)
//数组名[索引位置]
System.out.println(maths[0]);
//5.使用循环控制数组输出
for (int i = 0; i < maths.length; i++) {
System.out.println(maths[i]);
}
//6.获取数组长度
//数组名称.length
//定义数组并分配内存空间
//数据类型 [] 数组名 = new 数据类型[长度];
//int [] maths = new int[4];
//8.定义数组并且初始化
//数据类型 [] 数组名称 = new 数据类型[]{元素1, 元素2, ...}
//数据类型 [] 数组名称 = {元素1, 元素2, ...}
//int [] maths = new int[]{5, 10, 15, 20};
//int [] maths = {5, 10, 15, 20}; //必须写成一行
}
注意:数组下标越界异常(不能超出数组长度)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
1.3 综合示例
public static void main(String[] args) {
//示例:循环输入5笔购物金额,进行显示
Scanner input = new Scanner(System.in);
//1.定义数组 用于存购物金额
int [] moneys = new int[5];
//2.循环输入内容存入数组
for (int i = 0; i < moneys.length; i++) {
System.out.println("请输入第" + (i + 1) + "笔购物金额");
int money = input.nextInt();
//将每笔购物金存入数组
moneys[i] = money;
}
//显示数组
int sum = 0; //累加器
System.out.println("序号\t\t金额");
for (int i = 0; i < moneys.length; i++) {
System.out.println((i + 1) + "\t\t" + moneys[i]);
sum = sum + moneys[i];
}
System.out.println("总金额:" + sum);
}
二、数组应用
2.1 排序
//1.排序:使用Arrays的sort方法进行升序排列
//1.1导入Arrays类
//import java util.Arrays
//1.2 使用sort方法进行升序排序
Arrays.sort(数组名称);
2.2 了解Arrays的其他方法
public static void main(String[] args) {
int [] ary = {1, 2};
int [] arys = {1, 2, 1};
System.out.println("判断两数组是否相等:" + Arrays.equals(ary, arys));
System.out.println("将数组转化为字符串:" + Arrays.toString(ary));
System.out.println("查找某个元素在数组中出现的位置,找不到则返回-3:" + Arrays.binarySearch(ary, 8));
}
注意:使用binarySearch的前提条件是数组要排序
2.3 数组插入的算法实现
//插入元素
int pos=2; //指定插入的位置
//将插入位置的数依次往后移动位置
for (int i = 数组名.length-1; i >插入的位置; i--) {
temp[i]=temp[i-1];
}
三、 数据类型转换
3.1 数据类型由低到高的顺序
char→short→int→long→float→double
3.2 数据类型转换的分类
隐藏数据类型转换:数据类型由低向高自动转换称为隐藏转换
**强制(显式)**数据类型转换:数据类型由高到低转换称为强制转换
(目标类型)变量
示例:
char c='A';
int math=c; //发生隐藏转换
System.out.println(math);
int math2=97;
char c1=(char)math2; //强制转换
System.out.println(c1);
作业
作业一
某班级参加有五名学员参加考试,求出总分,平均分,最高分,最低分,还要将每个学生分数由到高排序。
请输入第一个学生的成绩:20
请输入第一个学生的成绩:50
请输入第一个学生的成绩:70
请输入第一个学生的成绩:60
请输入第一个学生的成绩:30
输出示例:
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author: 开心就好9905
* @Date: 2024/3/22 20:35
* @Description:作业一:某班级参加有五名学员参加考试,
* 求出总分,平均分,最高分,最低分,还要将每个学生分数由到高排序。
*/
public class Grade_of_Students {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] grades = new int[5];
for (int i = 0; i < grades.length; i++) {
System.out.print("请输入第" + (i + 1) + "个学生的成绩:");
grades[i] = scanner.nextInt();
}
Arrays.sort(grades); //排序
System.out.println("序号\t\t成绩");
for (int i = 0; i < grades.length; i++) {
System.out.println((i + 1) + "\t\t" +grades[i]);
}
//输出最高最低分
//方法一:
//排好序了,所以最高分就是数组最后一个元素,最低分就是数组第一个元素
//System.out.println("最高分:" + grades[4]);
//System.out.println("最低分:" + grades[0]);
//方法二:通用办法,假如没有排过序就用此办法
int max = grades[0];
for (int i = 0; i < grades.length; i++) {
if (grades[i] > max){
max = grades[i];
}
}
System.out.println("最高分:" + max);
int min = grades[0];
for (int i = 0; i < grades.length; i++) {
if (grades[i] < min){
min = grades[i];
}
}
System.out.println("最低分:" + min);
//求平均分和总分
int sum = 0;
for (int i = 0; i < grades.length; i++) {
sum += grades[i];
}
int avg = sum / grades.length;
System.out.println("平均分:" + avg);
System.out.println("总分:" + sum);
}
}
作业二
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author: 开心就好9905
* @Date: 2024/3/23 14:54
* @Description:作业二:将一组乱序字符进行排序,并且进行升序和逆序输出
*/
public class Array_Sort {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char [] arys;
/*
//输入字符数组的方式
for (int i = 0; i < arys.length; i++) {
arys[i] = input.next().charAt(i);
}
*/
arys = new char[]{'a', 'c', 'u', 'b', 'e', 'p', 'f', 'z'};
System.out.print("原字符序列:");
for (int i = 0; i < arys.length; i++) {
System.out.print(arys[i] + " ");
}
System.out.println();
Arrays.sort(arys);
System.out.print("升序排序后:");
for (int i = 0; i < arys.length; i++) {
System.out.print(arys[i] + " ");
}
System.out.println();
System.out.print("逆序输出为:");
for (int i = 0; i < arys.length; i++) {
System.out.print(arys[arys.length - 1 - i] + " ");
}
}
}
作业三
实现数组拷贝
将以下两个数组的内容复制到另一个数组(结果是:10,20,30,40,50,60, 70,80,90)
int ary[]={10,90,30,60};
int ary2[]={50,20,70,80,40};
import java.util.Arrays;
/**
* @Author: 开心就好9905
* @Date: 2024/3/27 0:38
* @Description:作业三:实现数组拷贝,将以下两个数组的内容复制到另一个数组
*/
public class Array_Copy {
public static void main(String[] args) {
int [] ary1 = new int[]{10, 90, 30, 60};
int [] ary2 = new int[]{50, 20, 70, 80 ,40};
int [] ary3 = new int[ary1.length + ary2.length]; //用于存放结果的数组
/*//方法一:遍历赋值
for (int i = 0; i < ary1.length; i++) {
ary3[i] = ary1[i];
}
for (int i = ary1.length; i < ary1.length + ary2.length; i++) {
ary3[i] = ary2[i - ary1.length];
}*/
//方法二:使用System.arraycopy()
System.arraycopy(ary1, 0, ary3, 0, ary1.length);
//将ary从0下标开始长度为ary1.length的元素复制给ary3从0开始长度为ary1.length的元素
System.arraycopy(ary2, 0, ary3, ary1.length, ary2.length);
//将ary2从0下标开始长度为ary2.length的元素复制给ary3从ary1.length开始长度为ary.length的元素
Arrays.sort(ary3);
/*System.out.print("最后结果:");
for (int i = 0; i < ary3.length; i++) {
System.out.print(ary3[i] + " ");
}
System.out.println();*/
System.out.println("最后结果:" + Arrays.toString(ary3));
}
}
作业四
练习在以下数组中的第2个位置插入元素(100)
int [] temp=new int[10];
temp[0]=5;
temp[1]=10;
temp[2]=15;
temp[3]=20;
import java.util.Arrays;
/**
* @Author: 开心就好9905
* @Date: 2024/3/27 1:09
* @Description:作业四:练习在以下数组中的第2个位置插入元素(100)
*/
public class Array_Insert {
public static void main(String[] args) {
int [] tmp = new int[10];
tmp[0] = 5;
tmp[1] = 10;
tmp[2] = 15;
tmp[3] = 20;
//指定插入的位置
int pos = 2;
//指定插入的元素
int inNum = 100;
//将插入位置后的元素顺序后移
for (int i = tmp.length - 1; i > pos ; i--) {
tmp[i] = tmp[i - 1]; //前一个位置赋值给后一个位置
}
//在插入位置赋值
tmp[pos] = inNum;
/*System.out.print("插入元素后的数组内容:");
for (int i = 0; i < tmp.length; i++) {
System.out.print(tmp[i] + " ");
}
System.out.println();*/
System.out.println("插入元素后的数组内容:" + Arrays.toString(tmp));
}
}
选做
在程序中有以下数组
String names[]={“张三”,”李四”,”麻子”,”小林子”,”无情”}
存放了所有的学生姓名。
请输入一个姓名,判断学生是否存在
效果如下:
1.输入不存在的情况:
请输入学生姓名:张三丰
没有找到该学生
2.输入存在的情况:
请输入学生姓名:麻子
存在
选做:实现该生在第几个位置
import java.util.Scanner;
/**
* @Author: 开心就好9905
* @Date: 2024/3/27 1:17
* @Description:略
*/
public class Arrays_Student_Names {
public static void main(String[] args) {
//System.out.println("查找某个元素在数组中出现的位置,找不到则返回-3:" + Arrays.binarySearch(ary, 8));
Scanner scanner = new Scanner(System.in);
String [] names = new String[]{"张三", "李四", "麻子", "小林子", "无情"};
String [] results = new String[names.length];
System.out.print("请输入学生姓名:");
String name = scanner.next();
for (int i = 0; i < names.length; i++) {
if (name.equals(names[i])){
System.out.println("存在");
System.out.println("该生在第" + (i + 1) + "个位置");
break;
}else{
if (i == names.length - 1){
System.out.println("没有找到该学生");
}
}
}
}
}