zoukankan      html  css  js  c++  java
  • 只用Java的Enum 20行代码实现课堂点到 ?

    本文原创首发CSDN,本文链接https://blog.csdn.net/qq_41464123/article/details/107633044 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本链接,谢谢配合。


    目录

    一、枚举是什么?

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

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


    一、枚举是什么?

     

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

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

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

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

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

     


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

     

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


    本文原创首发CSDN,本文链接https://blog.csdn.net/qq_41464123/article/details/107633044 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本链接,谢谢配合。


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

     

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

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

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

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

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

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

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

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

    public static User choose() {
    	int randomNum = (int)Math.floor(Math.random()*User.values().length);
    	for(User l : User.values()) {
    		randomNum --;
    		if(randomNum < 0) {
    			return l;
    		}
    	}
    	return null;
    }

    完整的代码:

    package cn.ypc;
    
    public class EnumTest2 {
    	public static void main(String[] args) {
    		int time = 10;
    		for(int i = 0 ; i < time ; i ++) {
    			System.out.println("The " + i + " time " + User.choose() + " is lucky");
    		}
    	}
    }
    enum User {
    	张三,李四,王五,赵六,ZWZ_1号,
    	ZWZ_2号,ZWZ_3号,ZWZ_4号,ZWZ_5号,ZWZ_6号
    	,ZWZ_7号,ZWZ_8号,ZWZ_9号,ZWZ_10号,ZWZ_11号
    	,ZWZ_12号,ZWZ_13号,ZWZ_14号,ZWZ_15号,ZWZ_16号;
    	
    	public static User choose() {
    		int randomNum = (int)Math.floor(Math.random()*User.values().length);
    		for(User l : User.values()) {
    			randomNum --;
    			if(randomNum < 0) {
    				return l;
    			}
    		}
    		return null;
    	}
    }
    

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

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

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

  • 相关阅读:
    hdu4726
    hdu2709
    hdu4706
    hdu4715
    快速幂取模
    快速幂
    asp.net中页面传值
    微信小程序支付
    sql 查询重复记录值取一条
    bower使用
  • 原文地址:https://www.cnblogs.com/yyzwz/p/13393205.html
Copyright © 2011-2022 走看看