用上Java的Enum枚举 玩一玩课堂点到

简介: 用上Java的Enum枚举 玩一玩课堂点到

一、枚举是什么?

 

Java是从JDK1.5开始,引入了这种新的类型——枚举(enum)。

其实枚举不是Java所特有的功能,在C++等其他编程语言中也一样存在。

但和其余编程语言相比,Java的枚举——enum更加强大,因为Java提供的枚举是完整的类,也就是说,我们可以随意添加成员变量和成员方法。

当然,Java的enum枚举也支持相互比较,也可以被序列化。

说了那么多,让我们先来了解一下Java的枚举。

 


二、枚举的基本用法 —— 浙江地级市列表

 

枚举是指由一组固定的常量组成的类型,使用enum关键字定义。比如下面浙江的地级城市:

1. enum ZheJiangCity{
2.  杭州,宁波,温州,绍兴,湖州,嘉兴,金华,舟山,衢州,丽水;
3. }

一般来说,一个省内的地级市是固定的,不会发生太多变化。如果要在程序中经常使用到浙江的地级市,我们就可以定义Java的枚举类

比如下面这样,可以直接调用枚举类的固定值

1. public static void main(String[] args) {
2.  System.out.println(ZheJiangCity.宁波);
3. }

注意:在枚举类中如果存在其他成员方法,则枚举变量列表最后要加上分号;

不过个人推荐不管有没有其他方法,都加上,这也是编程中一个良好的习惯。


刚刚说了,Java的枚举类中,可以添加成员方法,比如我在这重写一个取长度方法。

1. enum ZheJiangCity{
2.  杭州,宁波,温州,绍兴,湖州,嘉兴,金华,舟山,衢州,丽水;
3.  public static int length() {
4.    return ZheJiangCity.values().length;
5.  }
6. }

接着,就可以在测试方法中测试length()方法。

1. public static void main(String[] args) {
2.  System.out.println(ZheJiangCity.length());
3. }

总的来说,在Java编程中要善于使用枚举类,个人认为枚举类可以给我们带来三点好处

1. 可以让代码更容易维护,类似前端的正则表达式,保证变量都是正确、合法的值。

2. 方便Java编程时,输入指定数据。因为只要输入一个点,就可以弹出所有的值。

3. 使得代码更加直观,允许使用描述性的名称表示数据,使用更加方便。


三、枚举实际应用 —— 课堂点到

 

接下来是一个实际的应用,那就是课堂随机点到的小游戏,利用Java的枚举类,20行代码即可实现

首先创建一个枚举类——User,放入点到的姓名范围

1. enum User {
2.  张三,李四,王五,赵六,ZWZ_1号,
3.  ZWZ_2号,ZWZ_3号,ZWZ_4号,ZWZ_5号,ZWZ_6号
4.  ,ZWZ_7号,ZWZ_8号,ZWZ_9号,ZWZ_10号,ZWZ_11号
5.  ,ZWZ_12号,ZWZ_13号,ZWZ_14号,ZWZ_15号,ZWZ_16号;
6. }

随机数需要Java的随机函数:Math.random() 来实现,该方法返回一个 0 ~ 1 的随机小数

我们将随机小数乘于枚举类变量长度,就可以得到0~len的一个随机浮点数

接着再使用Math.floor()方法向下取整,再强制转换为int整型,就实现了随机下标的功能

int randomNum = (int)Math.floor(Math.random()*User.values().length);

接着再从枚举类中遍历,找到第n个元素,返回即可

1. public static User choose() {
2.  int randomNum = (int)Math.floor(Math.random()*User.values().length);
3.  for(User l : User.values()) {
4.    randomNum --;
5.    if(randomNum < 0) {
6.      return l;
7.    }
8.  }
9.  return null;
10. }

完整的代码:

1. package cn.ypc;
2. 
3. public class EnumTest2 {
4.  public static void main(String[] args) {
5.    int time = 10;
6.    for(int i = 0 ; i < time ; i ++) {
7.      System.out.println("The " + i + " time " + User.choose() + " is lucky");
8.    }
9.  }
10. }
11. enum User {
12.   张三,李四,王五,赵六,ZWZ_1号,
13.   ZWZ_2号,ZWZ_3号,ZWZ_4号,ZWZ_5号,ZWZ_6号
14.   ,ZWZ_7号,ZWZ_8号,ZWZ_9号,ZWZ_10号,ZWZ_11号
15.   ,ZWZ_12号,ZWZ_13号,ZWZ_14号,ZWZ_15号,ZWZ_16号;
16. 
17.   public static User choose() {
18.     int randomNum = (int)Math.floor(Math.random()*User.values().length);
19.     for(User l : User.values()) {
20.       randomNum --;
21.       if(randomNum < 0) {
22.         return l;
23.       }
24.     }
25.     return null;
26.   }
27. }

运行几次程序发现,课堂点名结果是随机生成的

当然 Java 的 Enum 应用远不止这个,还有很多等着我们去学习。

总之使用枚举类,可以容易的限制程序只采用指定的某一个有效值,确保信息正确有效


相关文章
|
1月前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
119 60
|
23天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
48 24
|
3月前
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
74 9
Java——反射&枚举
|
3月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
90 5
|
3月前
|
安全 Java 开发者
Java 枚举(enum)详解
Java 中的枚举(`enum`)是一种特殊的数据类型,用于定义一组固定的常量,提升代码的类型安全性和可读性。枚举使用 `enum` 关键字定义,支持方法和构造函数,具有类型安全、单例、自动序列化等特点,并且可以遍历和用于 `switch` 语句中。实际应用包括状态机、指令集、类型标识等场景。枚举使代码更加清晰易维护。
222 1
|
4月前
|
Java
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
4月前
|
Java 开发者
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案。本文通过技术综述及示例代码,剖析两者在性能上的差异。if-else具有短路特性,但条件增多时JVM会优化提升性能;switch则利用跳转表机制,在处理大量固定选项时表现出色。通过实验对比可见,switch在重复case值处理上通常更快。尽管如此,选择时还需兼顾代码的可读性和维护性。理解这些细节有助于开发者编写出既高效又优雅的Java代码。
64 2
|
5月前
|
Java
Java里的enum类型可以用这swich里吗
Java里的enum类型可以用这swich里吗
37 9
|
4月前
|
安全 Java 编译器
|
5月前
|
存储 缓存 Java
java枚举消除冗余代码问题之findByName和findByValue方法工作时的问题如何解决
java枚举消除冗余代码问题之findByName和findByValue方法工作时的问题如何解决
下一篇
DataWorks