import java.util.Random;
public enum Input {
NICKEL(5),DIME(10),QUARTER(25),DOLLAR(100),
TOOTHPASTE(200), CHIPS(75),SODA(100),SOAP(50),
ABORT_TRANSACTION{
public int amount() {
throw new RuntimeException("ABORT.amount");
}
},
STOP {
public int amount() {
throw new RuntimeException("STOP.amount");
}
};
int value;
Input(int value) {
this.value = value;
}
Input() {}
int amount() {return value;}
static Random rand = new Random(47);
public static Input randomSelection() {
return values()[rand.nextInt(values().length-1)];
}
}
多路分发
import java.util.Random;
public class RoShamBo1 {
static final int SIZE = 20;
private static Random random = new Random(47);
public static Item newItem() {
switch (random.nextInt(3)) {
default:
case 0: return new Scissors();
case 1: return new Paper();
case 2: return new Rock();
}
}
public static void match(Item a, Item b) {
System.out.println(a+" vs. "+b+": " +a.compete(b));
}
public static void main(String[] args) {
match(newItem(), newItem());
}
}
public class Rock implements Item{
@Override
public Outcome compete(Item item) {
return item.eval(this);
}
@Override
public Outcome eval(Paper p) {
return Outcome.WIN;
}
@Override
public Outcome eval(Scissors s) {
return Outcome.LOSE;
}
@Override
public Outcome eval(Rock r) {
return Outcome.DRAW;
}
@Override
public String toString() {
return "Rock";
}
}
import com.sun.corba.se.impl.oa.toa.TOA;
public class Scissors implements Item{
@Override
public Outcome compete(Item item) {
return item.eval(this);
}
@Override
public Outcome eval(Paper p) {
return Outcome.LOSE;
}
@Override
public Outcome eval(Scissors s) {
return Outcome.DRAW;
}
@Override
public Outcome eval(Rock r) {
return Outcome.WIN;
}
@Override
public String toString() {
return "Scissors";
}
}
public class Paper implements Item{
@Override
public Outcome compete(Item item) {
return item.eval(this);
}
@Override
public Outcome eval(Paper p) {
return Outcome.DRAW;
}
@Override
public Outcome eval(Scissors s) {
return Outcome.WIN;
}
@Override
public Outcome eval(Rock r) {
return Outcome.LOSE;
}
@Override
public String toString() {
return "Paper";
}
}
public enum Outcome {
WIN,
LOSE,
DRAW
}
public interface Item {
Outcome compete(Item item);
Outcome eval(Paper p);
Outcome eval(Scissors s);
Outcome eval(Rock r);
}