4

switch你可以在 Java 的语句中包含多个变量吗?

enum Facing { North, South, East, West }

enum Forward { Right, Left }

Forward forward;

Facing facing;

Integer myNumber;

所以它看起来像这样?如果是这样,我将如何实施

switch (facing, forward) {
  case North, Right : facing 1 = East
}

我知道这是错误的,但想知道这种技术是否可行以及我将如何实施它?

4

5 回答 5

9

Eng.Fouad提供了一种解决方法。

另一个选择可能是创建一个更复杂的 Facing 枚举,如下所示:

enum Facing {
  North {
    Facing right() { return East; }
    Facing left() { return West; }
  },
  East {
    Facing right() { return South; }
    Facing left() { return North; }
  },
  South {
    Facing right() { return West; }
    Facing left() { return East; }
  },
  West {
    Facing right() { return North; }
    Facing left() { return South; }
  };
  abstract Facing right();
  abstract Facing left();
}

这样的构造还允许轻松链接,以便您可以编写一个通用的反向例程,如下所示:

Facing reverse(Facing facing) { return facing.right().right(); }
于 2011-06-24T20:21:49.190 回答
4

你可以这样做:

switch(facing)
{
    case North:
         switch(forward)
         {
              case Right: // blah blah
              break;
         }
    break;
}
于 2011-06-24T20:13:04.357 回答
2

这似乎属于Facing:

enum Facing {

    North, East, South, West;

    public Facing turn(Forward f) {
        return values()[(ordinal() + (f == Forward.Right ? 1 : 3)) % 4];
    }
}
于 2011-06-24T20:36:26.360 回答
2

JDK 7开始,您可以使用 String 上的 Switch 来模拟这一点:

Facing facing = Facing.North;
Forward forward = Forward.Right;

String facingForward = facing + "-" + forward;
switch(facingForward){
    case "North-Right": return East;
    ..
}
于 2011-06-24T20:37:33.647 回答
0

实际上,您正在对一组状态转换进行建模,当您处于特定状态(例如面向北方)时,某些动作(例如顺时针转 90 度)会导致一个新状态(面向东方)

您可以使用大量嵌套的 switch 语句或类似的东西对此类事物进行建模。我认为您可能最好将状态实际建模为显式类,可能是从定义动作的抽象基类派生的。

我怀疑如果你的状态或行为变得稍微复杂一点,你会发现你需要这些类。

于 2011-06-24T20:19:47.223 回答