您的位置:首页 > 编程语言 > Java开发

JAVA中【enum】的使用

2016-09-02 15:04 176 查看

前言

此次主要是为了完成老师布置的任务:

写一个石头剪刀布的游戏,一开始使用数字代替了石头剪刀布,后来老师说用枚举可以写的更漂亮。

然后我就试了一下,在此作为记录,方便日后查看枚举是怎么用的(逃

参考书是:

《JAVA2核心技术卷1·基础知识(第七版)》

不确定有没有中文,我学校图书馆只有英文的- -

实现功能

一个玩家出拳

一个AI随机出拳

判断胜负(逃

谈谈枚举类型

在前文提及的实现需求中,使用普通变量的做法是分别将“剪刀”、“石头”、“布”分别设为一个特定的值如1、2、3。

又或者使用字符串存储用户的选择再进行判断。

我提及的参考书中谈到,这样的做法有可能让变量持有错误的值。(It is too easy for a variable to hold a wrong value.)

例如我现在的需求是要该整形变量只能为1、2、3。

或者只要该字符串变量为剪刀、石头、布这三个值。

如果让用户输入,用户可没那么听话,会输入错误的值,这时我们需要做一段啰里啰唆的验证。。数字还好,字符串则要做各种各样的验证,岂不是神烦?

而枚举类型的变量呢,它就让我们省心了。

你限定它只能是哪几个值,如果想存其他值进去就会报异常。

类似于你想登录一个网站,必须先注册,没注册的进不去。

一个简单的例子

import java.util.Scanner;
public class BaseClass {
public enum Skill {
石头, 剪刀, 布;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String input = in.next();
//使用Enum类的valueOf转换。String也有valueOf方法,应该不陌生
Skill skill = Enum.valueOf(Skill.class, input);
System.out.println("skill=" + skill);
}
}


输出结果:

剪刀
skill=剪刀

ooxx
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant FingerGuess.BaseClass.Skill.ooxx


可以看到,这里限定Skill类只能有3个值。

输入ooxx就会抛异常,如此就很方便的限定了一个变量所能存储的值。

再谈枚举类

public enum Skill { 石头, 剪刀, 布; }


Skill其实是一个类, 而石头、剪刀、布则是该类自身的三个实例。

如果我们给Skill的构造方法添加参数,那三个实例必然也需要传递参数。

举个例子:

import java.util.Scanner;
public class SimplyDemo {
public enum Skill {
石头(1), 剪刀(2), 布(3);

Skill(int sign) {
this.sign = sign;
}

public int getSign() {
return sign;
}

private int sign;
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String choose = in.next();
Skill s1 = Enum.valueOf(Skill.class, choose);

System.out.println(s1);
System.out.println(s1.getSign());
}
}


结果是

输入:
石头

输出:
石头
1


另外,这个类的内部是不会构造出新对象的,所以即使值看起来是字符串,都可以直接用==来判断两个值是否相等而不用equals。

举个例子:

Skill s1 = Enum.valueOf(Skill.class, "石头");
Skill s2 = Enum.valueOf(Skill.class, "剪刀");
System.out.println(s1 == s2);

s2 = Skill.石头;
System.out.println(s1 == s2);


上面代码的结果将会是

false
true


以上,然后我就愉快的写作业去了。

END

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java enum