Java实例——为新员工分配部门

技术关键:

1、Switch多分支语句的使用,该语句只支持对常量的判断;

2、对字符串的哈希码进行判断,也就是把String类的hashCode()方法返回值作为Switch语法的表达式,case关键字之后跟随的是各种字符串常量的哈希码整数值。

知识点:

哈希码

在Java中,哈希码代表对象的特征。可以根据的自己的需求,采用不同的算法产生的一个Int型数字。

几个常用的哈希码的算法:

1、Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

2、String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串所在的空间相同,返回的哈希码也相同。

3、Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值。

实现过程:

 1 package test;
 2 import java.util.Scanner;
 3 public class Example {
 4     public static void main(String[] args) {
 5         Scanner scan = new Scanner(System.in);
 6         System.out.println("请输入新员工的姓名:");
 7         String name = scan.nextLine();        // 接收员工名称
 8         System.out.println("请输入新员工应聘的编程语言:");
 9         String language = scan.nextLine();  // 接收员工应聘的编程语言
10
11         // 根据编程语言确定员工分配的部门
12         switch (language.hashCode()) {
13             case 3254818:                     // java的哈希码
14             case 2301506:                     // Java的哈希码
15             case 2269730:                     // JAVA的哈希码
16                 System.out.println("员工"+name+"被分配到Java程序开发部门。");
17                 break;
18             case 3104:                        // c#的哈希码
19             case 2112:                        // C#的哈希码
20                 System.out.println("员工"+name+"被分配到C#项目维护组。");
21                 break;
22             case -709190099:                  // asp.net的哈希码
23             case 955463181:                   // Asp.net的哈希码
24             case 9745901:                     // ASP.NET的哈希码
25                 System.out.println("员工"+name+"被分配到Asp.net程序测试部门。");
26                 break;
27             default:
28                 System.out.println("本公司不需要" + language + "语言的程序开发人员。");
29         }
30     }
31 }

依照书中所给代码敲入后,一开始我不能理解switch语句中case的值是哪里来的,百度后才明白,原来是先将各种语言罗列出不同的写法,比如java有JAVA、java、Java这三种写法,通过hashcode方法提前获取哈希码的值再注释掉,而书中并没有给出这一过程。注释掉的代码如下:

System.out.println("java".hashCode());
System.out.println("Java".hashCode());
System.out.println("JAVA".hashCode());
System.out.println("C#".hashCode());
System.out.println("c#".hashCode());
System.out.println("asp.net".hashCode());
System.out.println("Asp.net".hashCode());
System.out.println("ASP.net".hashCode());

通过运行,我们可以获取各种语言不同写法所对应的哈希码,并将其放到case中进行后续判断。

该实例中的扩展练习是为学生分配兴趣小组,我们可以依据前面为员工分配部门为例,先求出不同兴趣小组的哈希码,比如足球、田径、文学等等,然后放到Switch语句中进行匹配判断即可。

原文地址:https://www.cnblogs.com/luckyliulin/p/8972316.html

时间: 2024-10-09 23:42:34

Java实例——为新员工分配部门的相关文章

查找所有已经分配部门的员工的last_name和first_name之SQL实现

题目描述 查找所有已经分配部门的员工的last_name和first_nameCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dept_no`));CREATE TABLE `employees` (`emp_no` int(11) NOT NU

Java内存区域和内存分配

最近面试时经常会被问到JVM以及内存分配的问题,觉得有必要学习总结一下下~~~ 一.Java内存区域 Java中,虚拟机自动进行内存管理,在Java虚拟机执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,主要包含以下几个部分: 1.程序计数器: 当前线程所执行的字节码的行号指示器: 字节码解释器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 线程私有:为了线程切换后能够恢复到正确的执行位置,每个线程需要有一个独立的程序计数器: JAVA方法,计数器记录正在执行

Java实例变量初始化

由一道面试题所想到的--Java实例变量初始化 时间:2015-10-07 16:08:38      阅读:23      评论:0      收藏:0      [点我收藏+] 该题目源自微信公众号(程序员的那些事)的推送:携程 Java 工程师的一道面向对象面试题 题目是这样的:求下面程序的输出: public class Base { private String baseName = "base"; public Base() { callName(); } public v

java学习-----jvm的内存分配及运行机制

VM运行时数据区域: 根据<Java虚拟机规范(第二版)>的规定,JVM包括下列几个运行时区域: 我们思考几个问题: 1.jVM是怎么运行的? 2.JVM运行时内存是怎么分配的? 3.我们写的java代码(类,对象,方法,常量,变量等等)最终存放在哪个区? VM运行时数据区域: 1.程序计数器(program Counter Register):   是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的

java\c程序的内存分配

JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行.本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明. 一.Java源文件的编译.下载.解释和执行 Java应用程序的开发周期包括编译.下载.解释和执行几个部分.Java编译程序将Java源程序翻译为JVM可执行代码?字节码.这一编译过程同C/C++的编译有

java调用域控服务实现部门用户增删改查

原创内容,爬取请指明出处:https://www.cnblogs.com/Lucy151213/p/11005298.html 公司做大后,用到的系统就会越来越多,来个新员工,需要在HR系统添加,然后再到域控系统添加,可能还需要到NC,OA等系统添加账号.后来公司引入总线系统,来个新员工只需要在HR系统添加账号,HR系统把员工信息下发到总线系统,总线系统再下发到其他各个系统,这样能保证数据的一致性. 我负责的那块就是让域控系统接收总线系统下发的员工信息.我在域控服务与总线系统中间搭建一层rest

Exchange设置自动发送新员工欢迎邮件

作为企业的IT一般会遇到HR部门提出的很多要求,其中新员工入职的欢迎邮件相信很多HR都会提出,这里介绍下如何通过Cmdlet Extension Agents结合XML脚本来实现这个功能,XML脚本见附件.该脚本支持文字和图片,需要修改ScriptingAgentConfig.XML脚本中黄色标注的部分以符合自身的实际环境. $smtpClient = New-Object System.Net.Mail.SmtpClient("ex2k10mbx1.hybrid.local") #

ART运行时Compacting GC为新创建对象分配内存的过程分析

在引进Compacting GC后,ART运行时优化了堆内存分配过程.最显著特点是为每个ART运行时线程增加局部分配缓冲区(Thead Local Allocation Buffer)和在OOM前进行一次同构空间压缩(Homogeneous Space Compact).前者可提高堆内存分配效率,后者可解决内存碎片问题.本文就对ART运行时引进Compacting GC后的堆内存分配过程进行分析. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从接口层面

Java 8的新特性—终极版

声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己翻译了一版(写作驱动学习,加深印象),有些地方参考了该同学的. Java 8 前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas