2022-07-16 第二小组 张鑫 学习笔记
实训第九天 习题
1.学习重点
1.数组的增删改查
2.精准查找数组数据
3.精准插入数据到数组
4.倒叙向数组中插入数据
2.学习心得
今天是第一周学习的最后一天,心情十分的激动,今天学习的内容虽然不是很多,但是比较难理解,上午我将自己写的代码和老师进行对比,发现了很多不足之处,例如变量命名的不够规范,循环嵌套的不够清晰,下午老师讲了几个案例,我明显感觉越来月不好理解了,但是我不能放弃,明天的考试希望能发挥好的效果!
3.学习内容
员工系统完善
Scanner sc = new Scanner(System.in);
System.out.println("欢迎使用员工管理系统");
int[] nos = new int[2];
String[] names = new String[2];
int i = 0;
int no = 1001;
a:while (true) {
System.out.println("请选择功能:1.添加员工 2.查询员工 3.修改员工 4.删除员工");
String flag = sc.next();
数组的增删改查
switch (flag) {
case "1":
/*
员工信息要保存到数组里
1.工号(不能输入,自动生成的自动递增的一个数字1001)
2.员工姓名:员工的工号和姓名都保存到数组里
int [] nos = new int[10];
String [] names = new String[10];
3.要考虑扩容问题
*/
System.out.println("请输入员工姓名:");
String name = sc.next();
/*
把员工的姓名和工号保存到对应的数组里
如果第一次输入的员工信息,保存到0的位置;
第二次输入员工的信息,保存到1的位置
*/
nos[i] = no;
names[i] = name;
System.out.println("添加成功,工号为:" + nos[i]+",姓名:"+names[i]);
i++;
no++;
/*
分析:
怎么才能知道即将要越界?
1.数组的最后一个元素不为null,0
2.当i的值和数组的最大下标,在进入到添加功能就先判断数组的下标是否合法
3.在添加完成后,i自增之后,再判断下一次的数组的下标是否合法
*/
if(i >= nos.length){
//数组扩容
int[] newNos = new int[nos.length +1];
String[] newNames = new String[names.length +1];
for (int j = 0; j < nos.length; j++) {
newNames[j] = names[j];
newNos[j]= nos[j];
}
//重新赋值
nos=newNos;
names=newNames;
}
continue a;
case "2":
System.out.println("请选择功能:1.根据工号查询 2. 查询所有");
String n =sc.next();
switch (n){
case "1":
System.out.println("请输入要查询的员工号");
int s = sc.nextInt();
//先去工号的数组中找,如果工号存在,拿到工号对应的下标
//用下标去姓名的数组中找姓名
int index =-1;
for (int j = 0; j < nos.length; j++) {
if (nos[j] == s) {
index = j;
break;
}
}
if (index != -1) {
System.out.println("工号为" + s + "的员工存在,姓名是" + names[index]);
} else {
System.out.println("工号为" + s + "的员工不存在");
}
break;
case "2":
for (int j = 0; j < nos.length; j++) {
System.out.println("工号" + nos[j] + "姓名" + names[j]);
}
break;
default:
}
continue a;
case "3":
System.out.println("请输入要修改的工号:");
int x = sc.nextInt();
/*
修改实际上是两个操作
修改之前要先查询,看看这个人在不在数组里
如果在,执行修改操作
如果不在,提示不存在
*/
int index =-1;
for (int j = 0; j < nos.length; j++) {
if (nos[j] == x) {
index = j;
break;
}
}
if (index != -1) {
System.out.println("工号为" + x + "的员工存在,姓名是" + names[index]);
System.out.println("请输入新的名字:");
String newname = sc.next();
names[index] = newname;
System.out.println("修改成功!工号为" + x + "姓名是" + names[index]);
} else {
System.out.println("工号为" + x + "的员工不存在");
}
continue a;
case "4":
/*
分析需求:
删除nos =0,names = null
nos =0 names =null
移位
1,2,3,4,5
删除3
1,2,0,4,5
1,2,4,5,0
思路:
1,2,3,4,5
1,2,0,4,5
新建一个数组
把现在数组中的数据重新放进新的数组,不包括0
int[]arr =[1,2,3,4,5]
int[]newArr = new int[arr.length]
*/
System.out.println("请输入要删除的工号:");
int s = sc.nextInt();
int y =-1;
for (int j = 0; j < nos.length; j++) {
if (nos[j] == y) {
index = j;
break;
}
}
if (y != -1) {
System.out.println("工号为" + s + "的员工存在,姓名是" + names[y]);
//找到了,就删除
nos[y]=0;
names[y]=null;
int []newNos =new int[nos.length];
String []newNames =new String[nos.length];
for (int j = 0; j < nos.length-1; j++) {
if (nos[i] == 0) {
newNos[j] =nos[j+1];
nos[j+1]=0;
}else {
newNos[j]=nos[j];
}
if(names[j] == null){
newNames[j] =names[j+1];
names[j+1] = null;
}else {
newNames[j]=names[j];
}
}
System.out.println("请输入新的名字:");
String newname = sc.next();
names[y] = newname;
System.out.println("修改成功!工号为" + s + "姓名是" + names[y]);
} else {
System.out.println("工号为" + s + "的员工不存在");
}
continue a;
default:
}
}
案例1
Scanner sc =new Scanner(System.in);
/*
有一个数组
*/
int []arr = new int[]{4,58,69,14,22,-1};
/*
键盘输入一个下标,获取指定下标的数字
*/
System.out.println("请输入一个下标:");
int index =sc.nextInt();
/*
输入的这个数是否合法
需要判断几种情况\
1.输入的是一个负值
2.输入的是一个正值,但是越界了
3.正确的情况
*/
if (index >= 0 && index <= arr.length-1) {
//合法情况
System.out.println("对应位置的值是:"+arr[index]);
}else {
//条件<0 || >5
//越界
System.out.println("你输入的数据有误,无法获取...");
}
案例2
int []arr = new int[5];
System.out.println("请输入数组中的5个值:");
/*
输入一个数,数是从后往前加
倒叙输入
*/
for (int i = arr.length-1;i >-1 ; i--) {
Scanner sc =new Scanner(System.in);
int num =sc.nextInt();
arr[i]=num;
}
System.out.println("输出的数组为:");
for (int i : arr) {
System.out.print(i+" ");
}
案例3
Scanner sc = new Scanner(System.in);
int [] arr = new int[2];
int i = 0;
ma:while(true) {
System.out.println("请输入数据:");
int num = sc.nextInt();
arr[arr.length - 1 - i] = num;
i++;
if (i >= arr.length) {
int[] newArr = new int[arr.length * 2];
for (int j = 0; j < arr.length; j++) {
newArr[newArr.length - 1 - j] = arr[arr.length - 1 - j];
}
arr = newArr;
}
System.out.println("是否继续添加:1、是 2、否");
String flag = sc.next();
switch (flag){
case "1":
continue ma;
case "2":
System.out.println("当前数组为:" + Arrays.toString(arr));
break ma;
}
}
案例4
Scanner sc = new Scanner(System.in);
int [] arr = new int[]{1,2,3,4,5};
// 扩容
int [] newArr = new int[arr.length * 2];
for (int j = 0; j < arr.length; j++) {
newArr[j] = arr[j];
}
arr = newArr;
main:while(true){
System.out.println("请输入要插入数据的下标:");
int index = sc.nextInt();
System.out.println("请输入要插入的数据:");
int num = sc.nextInt();
/*
1.因为数组已满,需要扩容
2.找到要插入的数据的位置
3.插入位置后面的数据需要向后移位
*/
// 定义一个临时变量,存储原来index位置的元素
int temp = arr[index];
// 把要插入的数存到了指定的位置
arr[index] = num;
// 原来位置的后面的那个数向后移一位
arr[index + 2] = arr[index + 1];
arr[index + 1] = temp;
// 要插入的位置的原始数据保存起来
int temp = arr[index];
// 把要插入的数据放到指定位置
arr[index] = num;
//判断要移位的数据的个数
for (int i = 1; i < arr.length - index; i++) {
arr[arr.length - i] = arr[arr.length - 1 - i];
}
arr[index + 1] = temp;
System.out.println("现在数组为:" + Arrays.toString(arr));
System.out.println("是否继续添加:1、是 2、否");
String flag = sc.next();
switch (flag){
case "1":
continue;
case "2":
System.out.println("当前数组为:" + Arrays.toString(arr));
break main;
// System.exit(-1);
}
}

浙公网安备 33010602011771号