2022-07-18-第二组-曹雨-Java03一些算法知识的复习和数组排序的讲解
作者:互联网
员工管理系统作业
一些初始值的定义
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int [] nos = new int[2];
String [] names = new String[2];
// 初始的工号
int no = 1001;
// 要操作的数组的下标
int i = 0;
//另外定义一个值,很多时候有大用处,新学习的思想,感觉不错,后续课程中我也常常用到
while(true){
System.out.println("欢迎使用员工管理系统");
System.out.println("请选择功能:1.添加员工 2.查询员工 3.修改员工 4.删除员工");
String flag = sc.next();
switch (flag) {
添加员工功能
要考虑越扩容问题
case "1":
System.out.println("请输入员工姓名:");
String name = sc.next();
nos[i] = no;
names[i] = name;
System.out.println("添加成功:员工的工号为:" + nos[i] + ",姓名:" + names[i]);
i++;
no++;
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++) {
// 数组中的数据的复制
newNos[j] = nos[j];
newNames[j] = names[j];
}
// 重新赋值
nos = newNos;
names = newNames;
}
break;
查询功能
case "2":
System.out.println("请选择功能:1、根据工号查询 2、查询所有");
String n = sc.next();
switch (n) {
case "1":
System.out.println("请输入要查询的员工号:");
int s = sc.nextInt();
// boolean b = false;
// 先要去工号的数组中找,如果工号存在,拿到工号对应的下标
// 我还要拿着这个下标去姓名的数组中找姓名
int index = -1;
for (int j = 0; j < nos.length; j++) {
if(nos[j] == s){
// 找到了
// System.out.println("工号:" + s + ",姓名:" + names[j]);
// b = true;
index = j;
break;
}
// else {
// System.out.println("工号:" + s + "不存在!");
// }
}
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++) {
if(nos[j] != 0){
System.out.println("工号:" + nos[j] + ",姓名:" + names[j]);
}
}
break;
default:
}
break;
修改姓名
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 + "不存在!");
}
break;
删除操作
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 [] arr = {1,2,0,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] == s){
y = j;
break;
}
}
if(y!= -1) {
System.out.println("工号:" + s + ",姓名:" + names[y]);
// 找到了,就删除
nos[y] = 0;
names[y] = null;
int [] newNos = new int[nos.length - 1];
String [] newNames = new String[names.length - 1];
for (int j = 0; j < nos.length - 1; j++) {
if(nos[j] == 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];
}
}
nos = newNos;
names = newNames;
System.out.println("工号:" + s + "删除成功!");
}else {
System.out.println("工号:" + s + "不存在!");
}
break;
default:
}
}
}
}
有一个数组,输入一个下标,输出对应下标在数组中的值
public static void main(String[] args) {
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("你输入的数据有误,无法获取...");
}
}
}
一个数组,从后往前输入数
public static void main(String[] args) {
// 准备一个键盘
Scanner sc = new Scanner(System.in);
int [] arr = new int[5];
/*
输入一个数,数是从后往前加
倒序输入
第一次输入的值给arr[arr.length - 1 - 0]
第二次输入的值给arr[arr.length - 1 - 1]
第三次输入的值给arr[arr.length - 1 - 2]
数组的最大下标 = 数组的长度 - 1
*/
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i+1) +"个数:");
// 输入
int num = sc.nextInt();
arr[arr.length - 1 - i] = num;
}
for (int i : arr) {
System.out.println(i);
}
}
输入一个数,从数组后往前输入,并带有扩容功能
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int [] arr = new int[2];
int i = 0;
main: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];
/*
1,2
[2,1]
[0,0,0,0]
[2,1,0,0]
[0,0,2,1]
*/
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;
case "2":
System.out.println("当前数组为:" + Arrays.toString(arr));
break main;
System.exit(-1);
}
}
}
总结
今天老师没有讲新的知识,将昨天晚上的作业重新讲了一遍。我认识到了代码编写的灵活性,学习到了一个新的编写方法。在很多时候,新定义一个值,用来做遍历或者判断可以让很多事情迎刃而解。我使用这个方法解决了许多问题,感觉到了自己的进步,以后继续努力,学习更多编写代码的方法。
标签:曹雨,Java03,int,18,System,println,工号,out,nos 来源: https://www.cnblogs.com/figh466/p/16489050.html