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. 数据交换格式 JSON

    1. 什么是 JSON 概念 : JSON 的英文全称是 JavaScript ObjEct Notation, 即 "JavaScript 对象表示法" . 简单来讲 : JSO ...

  2. typeScript类型总结

    1.对象类型 {} 用来指定对象中可以包含哪些属性,在属性名后加?表示属性是可选的 语法:{属性名:属性值类型,属性名:属性值类型} 示例: let a:{name:string,age?:numbe ...

  3. Glide源码解析二---into方法

    转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12543154.html Glide作为一个强大的图片加载框架,已经被android官方使用,所以,明白 ...

  4. 好客租房29-从jsx中抽离事件处理程序

    从jsx中抽离过多js逻辑代码 会显得非常混乱 推荐:将逻辑抽离到单独的方法中 保证jsx结构清晰 //导入react     import React from 'react'           ...

  5. Yaml中特殊符号"| > |+ |-"的作用

    "|",保留每行尾部的换行符\n. ">",删除每行尾部的换行符\n,则看似多行文本,则在程序中会将其视为一行. include_newlines: | ...

  6. Python数据分析--Numpy常用函数介绍(3)

    摘要:先汇总相关股票价格,然后有选择地对其分类,再计算移动均线.布林线等. 一.汇总数据 汇总整个交易周中从周一到周五的所有数据(包括日期.开盘价.最高价.最低价.收盘价,成交量等),由于我们的数据是 ...

  7. 「ARC 139F」Many Xor Optimization Problems【线性做法,踩标】

    「ARC 139F」Many Xor Optimization Problems 对于一个长为 \(n\) 的序列 \(a\),我们记 \(f(a)\) 表示从 \(a\) 中选取若干数,可以得到的最 ...

  8. springcloud-- Alibaba-nacos--支持的几种服务消费方式

    通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...

  9. singlelinklist

    C++实现单链表 阅读先知 链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素. 链表中每一个元素成为"结点",每一个结点都是由数 ...

  10. 文字轮播与图片轮播?CSS 不在话下

    今天,分享一个实际业务中能够用得上的动画技巧. 巧用逐帧动画,配合补间动画实现一个无限循环的轮播效果,像是这样: 看到上述示意图,有同学不禁会发问,这不是个非常简单的位移动画么? 我们来简单分析分析, ...