JavaSE小项目(基础语法;二分查找;冒泡排序)--还是存在bug:删除一个数组内一组数据后面只有一组后面数据能向前移位 (YY:使用“方法”应该会好很多,代码架构会清晰一点)未找到用户时的提示功能未完成

点击查看代码
import java.util.Scanner;

public class ManageSystem {
public static void main(String[] args) {
int nos[] = new int[3];
String names[] = new String[3];
int rowData=0;
Scanner sc = new Scanner(System.in);
System.out.println("欢迎进入员工管理系统");
mainProgram:for (; ; ) {
System.out.println("请输入数字选择操作: 1.添加员工 2.查询员工信息 3.修改员工信息 4.删除员工信息,按其他任意键退出系统");
String flag = sc.next();
// 分支程序:选择功能
switch (flag) {
case "1":
//添加员工功能
//先查看是否有剩余容量 loopInsert:for (int i = 0; i < 100; i++) { System.out.println("请输入姓名");
nos[rowData] = 1000 + rowData;
String name = sc.next();
names[rowData] = name;
System.out.println("工号为" + nos[rowData] + "名字是" + names[rowData]);
rowData++;
// ********************数组扩容*****************************
if (names[names.length - 1] != null && nos[nos.length - 1] != 0) {
int[] newNos = new int[nos.length + 2];
String[] newNames = new String[names.length + 2];
for (int no = 0; no < nos.length; no++) {
newNos[no] = nos[no];
}
for (int no = 0; no < names.length; no++) {
newNames[no] = names[no];
}
nos = newNos; //直接复制的话原数组的大小,数据都会被复制过去
names = newNames;
}
System.out.println("继续输入请输入1,查看其它功能任意键");
String exit1 = sc.next();
switch (exit1) {
case "1":
continue loopInsert;
default:
continue mainProgram;//缺少返回总系统标签
}
} case "2":
System.out.println("欢迎查询员工信息");
search:while (true){
System.out.println("按工号查询员工信息请按‘1’,按姓名查询员工信息请按‘2’,输出所有员工请按‘3’,逆序输出请按‘4’");
String tempSearch=sc.next();
switch (tempSearch){
case "1":
searchNum:for(;;){
System.out.println("请输入想查询的工号");
int no=sc.nextInt();
int left=0;
int right=nos.length-1;
if (no<nos[left]&&no>nos[right]){
System.out.println("您查找的用户不存在");
}else {
// 二分查找(算法)
while (left<=right){
int middle=(right+left)/2; //一定要放在循环里面middle才会变
if (nos[middle]==no){
System.out.println("你查询的员工工号为"+no+"姓名为"+names[middle]);
break;
} else if (nos[middle]>no) {
right=middle-1;
}else {
left=middle+1;
}
}
} System.out.println("继续输入请输入1,,上一层请按2,返回主菜单任意键");
String exit1= sc.next();
switch(exit1){
case "1":
System.out.println("继续操作");
continue searchNum;
case "2":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签 }
}
case "2":
searchName:for (;;){
System.out.println("请输入想查询的员工姓名");
String tempName= sc.next();
for (int i = 0; i < names.length; i++) {
if (names[i].equals(tempName)){
System.out.println("你查询的员工工号为"+nos[i]+"姓名为"+tempName);
}
}
System.out.println("继续输入请输入1,,上一层请按2,返回主菜单任意键");
String exit1= sc.next();
switch(exit1){
case "1":
System.out.println("继续操作");
continue searchName;
case "2":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签
}}
case "3":
printAll:for(int i=0;i< nos.length;i++) {
System.out.println("你查询的员工工号为" + nos[i] + "姓名为" + names[i]);
}
System.out.println("返回上一层请按1,返回主菜单任意键");
String exit2= sc.next();
switch(exit2){
case "1":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签
} case "4":
printReverse:for (;;){
System.out.println("员工逆序输出");
int tempNum;
String tempStr;
// 冒泡排序(算法)
for (int i=0;i<nos.length-1;i++){
for (int j=0;j<nos.length-i-1;j++){
if(nos[j]<nos[j+1]){
tempNum=nos[j];
nos[j]=nos[j+1];
nos[j+1]=tempNum;
tempStr=names[j];
names[j]=names[j+1];
names[j+1]=tempStr;
}
}
}
for (int i = 0; i < nos.length; i++) {
System.out.println("你查询的员工工号为"+nos[i]+"姓名为"+names[i]+"(逆序)");
}
System.out.println("返回上一层请按1,返回主菜单任意键");
String exit3= sc.next();
switch(exit3) {
case "1":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签
}
}
default:
System.out.println("输入错误,请重新选择信息");
continue search;
}
} case "3": //修改员工功能
change:for (;;) {
System.out.println("输入想要修改的员工的员工姓名");
String tempString = sc.next();
// int tempInt=sc.nextInt();
changeIn:
for (int i = 0; i < nos.length; i++) { if (tempString.equals(names[i]) ){//想要判断工号还需再加ifelse,执行工号判断,flese,else里写Integer.parseInt(tempString)==nos[i]进行判断
// int flag1 = 1;
// if (flag1 != 1) {
// System.out.println("您输入的信息还有其他额外信息");
// }
System.out.println("你想修改的员工的工号为" + nos[i] + "姓名是" + names[i]);
System.out.println("请输入想要的名字信息");
names[i] = sc.next();
System.out.println("修改后的员工的工号为" + nos[i] + "姓名是" + names[i]);
// flag1++; //这里想做的本来是一个提示还有其他用户姓名与想要查询的员工姓名相同,然后进行提示,那样的话flag要定义在外面,和判断数组中元素是否存在代码结构相同
}
}
System.out.println("返回主菜单任意键");
String exit1= sc.next();
switch(exit1) {
default:
continue mainProgram;//缺少返回总系统标签
}
}
case "4": //删除员工信息
deleteMes:for(;;){
System.out.println("删除前员工信息为");
for (int i = 0; i < nos.length; i++) {
System.out.println("工号:"+nos[i]+"姓名:"+names[i]);
}
System.out.println("输入想要删除的员工的员工姓名");
String tempString=sc.next();
deleteAgain:for (int i= 0;i<nos.length;i++) {
if (tempString.equals(names[i])){
// int flag1=1;
// if(flag1!=1) {
// System.out.println("您输入的信息还有其他额外信息");
// }
askAgain:for (;;){
System.out.println("你想删除的员工的工号为"+nos[i]+"姓名是"+names[i]+",是否删除当前员工?1是2否");
// flag1++;
String judge=sc.next();
if (judge.equals("是")){
// ************************数组移位**************************
for (int j = i; j < nos.length-1; j++) {
names[j]=names[j+1]; //删除数组内元素,元素前移
nos[j]=nos[j+1];
names[j+1]=null;
nos[j+1]=0;
}
continue deleteAgain;
} else if (judge.equals("否")) {
System.out.println("本次操作已完成");
break deleteMes;
}else {
System.out.println("返回主菜单");
continue mainProgram;
}
}
}
}
System.out.println("输入后员工信息为");
for (int i = 0; i < nos.length; i++) {
System.out.println("工号:"+nos[i]+"姓名:"+names[i]);
}
// 选择下一步
System.out.println("返回上一层请按1,返回主菜单任意键");
String exit1= sc.next();
switch(exit1) {
case "1":
System.out.println("已返回上一层");
continue deleteMes;
default:
continue mainProgram;//缺少返回总系统标签
}
}
default:
System.exit(0);
}
}}}

算法

线性查找

线性查找:就是顺序查找,时间复杂度O(1),如果数据在最后一位,效率最差。

二分查找

二分查找的要求:一定要是有序数组才可以进行二分查找,设置左右索引left&right,中间为比较项middle,和数值比较,大于比较项则left=middle+1,小于则right=middle-1,然后middle值会发生变化

点击查看代码
                                    System.out.println("请输入想查询的工号");
int no=sc.nextInt();
int left=0; //左索引
int right=nos.length-1; //右索引
if (no<nos[left]&&no>nos[right]){//判断是否在数组中
System.out.println("您查找的用户不存在");
}else {
// 二分查找(算法)
while (left<=right){
int middle=(right+left)/2; //一定要放在循环里面middle才会变
if (nos[middle]==no){
System.out.println("你查询的员工工号为"+no+"姓名为"+names[middle]);
break;
} else if (nos[middle]>no) {
right=middle-1; //中间小于middle,right左移
}else {
left=middle+1;//中间大于middle,left右移
}
}
}

##冒泡排序

点击查看代码
public class BubbleSort {
public static void main(String[] args) {
int [] arr=new int[]{1,5,3,9,-2};
int tempNum;
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j]>arr[j+1]){
tempNum=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tempNum;
}
}
}
for (int i:arr){
System.out.print(i+",");
}
}
}

![](https://img2022.cnblogs.com/blog/2815362/202207/2815362-20220716123317854-126870911.png)

选择排序

假定我们的第一个元素就是当前最小(大)的,一个一个与后面进行比较,如果后面的比我们的第一元素小,就把他们俩个元素在数组内位置进行交换,然后再拿这个元素往后比较,第一轮比较完成后,在拿第二个元素作为基准重复上面的操作。

点击查看代码
public class SelectSort {
public static void main(String[] args) {
int [] arr=new int[]{-2,-9,5,6,10,-1,0};
int tempInt;
for (int i = 0; i < arr.length-1; i++) { //一个一个拿取元素
for (int j = i+1; j < arr.length ; j++) {
if (arr[i]>arr[j]){//比后面大,准备交换俩个元素在数组中的位置
tempInt=arr[i];
arr[i]=arr[j];
arr[j]=tempInt;
}
}
}
for (int i:arr){
System.out.print(i+",");
}
}
}

![](https://img2022.cnblogs.com/blog/2815362/202207/2815362-20220716123338817-64245941.png)

2022-07-15/16 第一小组 田龙月 管理系统javaSE的更多相关文章

  1. 2022 07 13 第一小组 田龙跃 Java再学习笔记

    1.类名命名规则: 只能由数字字母,下划线,美元符号组成(不能以数字开头,尽量不要用下划线开头) 2.注释(养成多写注释的好习惯) 单行注释 // ctrl+/ 多行注释 // ctrl+shirt+ ...

  2. Python Cookbook(第3版)中文版:15.16 不确定编码格式的C字符串

    15.16 不确定编码格式的C字符串¶ 问题¶ 你要在C和Python直接来回转换字符串,但是C中的编码格式并不确定. 例如,可能C中的数据期望是UTF-8,但是并没有强制它必须是. 你想编写代码来以 ...

  3. oracle 日期函数 求年的最后一天、第一天,月的最后一天

    add_months(trunc(to_date('2013','yyyy') ,'yyyy'),12)-1  2013年最后一天 trunc(to_date('2013','yyyy') ,'yyy ...

  4. 剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

    1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...

  5. linux 学习15 16 启动管理,备份和恢复

    第十五讲 启动管理 . CentOS .x 启动管理 //此处指6.3 系统运行级别 .运行级别 运行级别 含 义 关机 单用户模式,可以想象为windows的安全模式,主要用于系统修复 //linu ...

  6. 日报 18/07/15 Java 性能优化

    尽量指定类和方法的final修饰符 带有final修饰符的类是不可派生的 在java核心api中 有许多应用final的例子 例如 java.lang.string整个类都是final的 为类指定fi ...

  7. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  8. 【20171027中】alert(1) to win 第13,14,15,16题

    第13题 题目: function escape(s) { var tag = document.createElement('iframe'); // For this one, you get t ...

  9. 13.14.15.16.17&《一个程序猿的生命周期》读后感

    13.TDS 的标准是什么,怎么样才能认为他是一个标准的TDS?? 14.软件的质量包括哪些方面,如何权衡软件的质量? 15.如何解决功能与时间的矛盾,优秀的软件团队会发布有已知缺陷的软件么? 16. ...

随机推荐

  1. iNeuOS工业互联网操作系统,数据点、设备和业务的计算与预警

    目       录 1.      概述... 2 2.      概念解释... 2 3.      数据点的计算与预警... 2 4.      设备的计算与预警... 3 5.      业务的 ...

  2. JS中的 && 、|| 、??、?. 运算符

    javascript有不少好用的运算符,合理的使用可以大大提高工作效率,以下简单介绍了4种,具体如下: && 逻辑与运算(&&)是 AND 布尔操作.只有两个操作数都为 ...

  3. 推荐三个好用的TamperMonkey洛谷插件

    Part 1: TamperMonkey 插件 Part 1.1 什么是 Tampermonkey 在我们学习的过程中,往往想要更多功能,这时候可以使用 TamperMonkey 插件进行美化 官网介 ...

  4. 【Java8新特性】Lambda表达式

    一.Lambda 表达式 是什么? Lambda读音:拉姆达. Lambda是一个匿名函数,匿名函数就是一个没有名字的函数. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). ...

  5. python之部分内置函数与迭代器与异常处理

    目录 常见内置函数(部分) 可迭代对象 迭代器对象 for循环内部原理 异常处理 异常信息的组成部分 异常的分类 异常处理实操 异常处理的其他操作 for循环本质 迭代取值与索引取值的区别 常见内置函 ...

  6. JVM的类加载过程

    每日一句 人到情多情转薄,而今真个不多情. 每日一句 The frog in the well knows nothing of the great ocean. 井底之蛙,不知大海. JVM 的类加 ...

  7. 【生成对抗网络学习 其三】BiGAN论文阅读笔记及其原理理解

    参考资料: 1.https://github.com/dragen1860/TensorFlow-2.x-Tutorials 2.<Adversarial Feature Learning> ...

  8. 聊聊 C++ 和 C# 中的 lambda 玩法

    这几天在看 C++ 的 lambda 表达式,挺有意思,这个标准是在 C11标准 加进去的,也就是 2011 年,相比 C# 2007 还晚了个 4 年, Lambda 这东西非常好用,会上瘾,今天我 ...

  9. Arduino WeMos D1 开发环境搭建

    更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年9月2日. WeMos D1介绍 WeMos D1开发板全称是WeMos D1 WiFI UNO R3开发板,基 ...

  10. 【Redis】集群故障转移

    集群故障转移 节点下线 在集群定时任务clusterCron中,会遍历集群中的节点,对每个节点进行检查,判断节点是否下线.与节点下线相关的状态有两个,分别为CLUSTER_NODE_PFAIL和CLU ...