家庭作业:Rock Paper Scissors游戏。
我创建了一个枚举:
enum Gesture{ROCK,PAPER,SCISSORS};
我想从中比较值来决定谁赢 - 计算机或人。设置值很好,比较工作正常(纸张覆盖岩石,岩石压碎剪刀,剪刀剪纸)。但是,我无法让我的领带发挥作用。只要有平局,用户就会被宣布为胜利者。
啊......废话......这将澄清:userPick
是一个String
,其值为rock
,paper
或scissors
。我无法使用==
将userPick
与computerPick
进行比较,正如您在下面看到的那样,我会从Gesture
转换为enum
类型。
if(computer == 1)
computerPick = Gesture.ROCK;
else
if(computer == 2)
computerPick = Gesture.PAPER;
else
computerPick = Gesture.SCISSORS;
if(userPick.equals(computerPick))
{
msg = "tie";
++tieGames;
}
etc....
我猜测rock
不等于ROCK
,或String userPick
无法匹配Gesture computerPick
,因为后者不是String
。但是,我无法在我的教科书或Oracle的Java教程中找到类似情况的例子,所以我不确定如何纠正这个问题......
任何提示?
答案 0 :(得分:41)
我从您的问题中收集userPick
是String
值。您可以这样比较:
if (userPick.equalsIgnoreCase(computerPick.name())) . . .
顺便说一句,如果您保证computer
始终是值1
,2
或3
(并且没有别的)之一,则可以转换它是Gesture
enum:
Gesture computerPick = Gesture.values()[computer - 1];
答案 1 :(得分:21)
您应该在toString()
中声明valueOf()
和enum
方法。
import java.io.Serializable;
public enum Gesture implements Serializable {
ROCK,PAPER,SCISSORS;
public String toString(){
switch(this){
case ROCK :
return "Rock";
case PAPER :
return "Paper";
case SCISSORS :
return "Scissors";
}
return null;
}
public static Gesture valueOf(Class<Gesture> enumType, String value){
if(value.equalsIgnoreCase(ROCK.toString()))
return Gesture.ROCK;
else if(value.equalsIgnoreCase(PAPER.toString()))
return Gesture.PAPER;
else if(value.equalsIgnoreCase(SCISSORS.toString()))
return Gesture.SCISSORS;
else
return null;
}
}
答案 2 :(得分:5)
我的想法:
<style>
body {
font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
</style>
如果你想检查价值你写:
public enum SomeKindOfEnum{
ENUM_NAME("initialValue");
private String value;
SomeKindOfEnum(String value){
this.value = value;
}
public boolean equalValue(String passedValue){
return this.value.equals(passedValue);
}
}
有点看起来很好:)也许有人会发现它很有用。
答案 3 :(得分:2)
您可以采用更简单的方式完成此操作,如下所示:
boolean IsEqualStringandEnum (String str,Enum enum)
{
if (str.equals(enum.toString()))
return true;
else
return false;
}
答案 4 :(得分:2)
定义枚举:
public enum Gesture
{
ROCK, PAPER, SCISSORS;
}
定义检查enum
内容的方法:
private boolean enumContainsValue(String value)
{
for (Gesture gesture : Gesture.values())
{
if (gesture.name().equals(value))
{
return true;
}
}
return false;
}
并使用它:
String gestureString = "PAPER";
if (enumContainsValue(gestureString))
{
Gesture gestureId = Gesture.valueOf("PAPER");
switch (gestureId)
{
case ROCK:
Log.i("TAG", "ROCK");
break;
case PAPER:
Log.i("TAG", "PAPER");
break;
case SCISSORS:
Log.i("TAG", "SCISSORS");
break;
}
}
答案 5 :(得分:2)
public class Main {
enum Vehical{
Car,
Bus,
Van
}
public static void main(String[] args){
String vehicalType = "CAR";
if(vehicalType.equals(Vehical.Car.name())){
System.out.println("The provider is Car");
}
String vehical_Type = "BUS";
if(vehical_Type.equals(Vehical.Bus.toString())){
System.out.println("The provider is Bus");
}
}
}
答案 6 :(得分:1)
静态导入GestureTypes然后使用valuesOf()方法可以使它看起来更清晰:
enum GestureTypes{ROCK,PAPER,SCISSORS};
和
import static com.example.GestureTypes.*;
public class GestureFactory {
public static Gesture getInstance(final String gesture) {
if (ROCK == valueOf(gesture))
//do somthing
if (PAPER == valueOf(gesture))
//do somthing
}
}
答案 7 :(得分:0)
这似乎很干净。
public enum Plane{
/**
* BOEING_747 plane.
*/
BOEING_747("BOEING_747"),
/**
* AIRBUS_A380 Plane.
*/
AIRBUS_A380("AIRBUS_A380"),
;
private final String plane;
private Plane(final String plane) {
this.plane= plane;
}
Plane(){
plane=null;
}
/**
* toString method.
*
* @return Value of this Enum as String.
*/
@Override
public String toString(){
return plane;
}
/**
* This method add support to compare Strings with the equalsIgnoreCase String method.
*
* Replicated functionality of the equalsIgnorecase of the java.lang.String.class
*
* @param value String to test.
* @return True if equal otherwise false.
*/
public boolean equalsIgnoreCase(final String value){
return plane.equalsIgnoreCase(value);
}
然后在主要代码中:
String airplane="BOEING_747";
if(Plane.BOEING_747.equalsIgnoreCase(airplane)){
//code
}
答案 8 :(得分:0)
这是我在Java 8中的解决方案:
public static Boolean isValidCity(String cityCode) {
return Arrays.stream(CITY_ENUM.values())
.map(CITY_ENUM::getCityCode)
.anyMatch(cityCode::equals);
}
答案 9 :(得分:-2)
您可以将字符串与枚举项目进行比较,如下所示
public class Main {
enum IaaSProvider{
aws,
microsoft,
google
}
public static void main(String[] args){
IaaSProvider iaaSProvider = IaaSProvider.google;
if("google".equals(iaaSProvider.toString())){
System.out.println("The provider is google");
}
}
}
答案 10 :(得分:-2)
您可以使用equals()
。
enum.equals(String)