将字符串与枚举值进行比较的正确方法是什么?

2022-08-31 15:00:44

家庭作业:石头剪刀布游戏。

我创建了一个枚举:

      enum Gesture{ROCK,PAPER,SCISSORS};

我想从中比较值来决定谁赢了 - 计算机还是人类。设置值工作正常,比较工作正常(纸张覆盖岩石,岩石粉碎剪刀,剪刀剪纸)。但是,我无法让我的领带工作。每当出现平局时,用户都会被宣布为获胜者。

啊......废话。。。这将澄清:是 带有值 、 、 或 的 。我无法用来比较,正如您在下面看到的,它从我的.userPickStringrockpaperscissors==userPickcomputerPickGestureenum

      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....

我猜想存在不等于的问题,或者无法匹配,因为后者不是.但是,我无法在我的教科书或Oracle的Java教程中找到类似情况的示例,因此我不确定如何纠正该问题...rockROCKString userPickGesture computerPickString

任何提示?


答案 1

我从你的问题中收集到一种价值。您可以像这样比较:userPickString

if (userPick.equalsIgnoreCase(computerPick.name())) . . .

顺便说一句,如果保证它始终是值之一,或者(而不是其他任何值),则可以将其转换为枚举,其中包含:computer123Gesture

Gesture computerPick = Gesture.values()[computer - 1];

答案 2

您应该在 中声明 和 方法。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;
    }
}