如何根据

时间:2015-06-24 20:18:49

标签: java methods types

请耐心等待,因为我正在努力解决这个问题。所以我们假设我有一个名为" UserType"的用户定义类型。而且这种类型有4个值:北,南,东和西。

public enum UserType {
    NORTH, SOUTH, EAST, WEST
}

然后,我想在另一个类中编写一个方法语句,它将根据类型增加两个变量的值。例如,

public class direction {
    private int peopleWhoGoNorth;
    private int peopleWhoGoSouth;

因此,每次调用以下方法时,WhoWhoGoNorth应该跟踪北方人数:

public void whichWay(UserType type) {
        }

我想知道如何在方括号之间创建一个语句,基本上会说:如果类型是North,则向peopleWhoGoNorth添加1,如果类型为South,则向peopleWhoGoSouth添加1。我猜测if / else语句应该这样做,但我不确定语法是如何工作的。以下是否可以?

public void whichWay (UserType type){
    if (UserType = NORTH){peopleWhoGoNorth = peopleWhoGoNorth + 1);
    if (UserType = SOUTH){peopleWhoGoSouth = peopleWhoGoSouth + 1);
    }

如果我有任何方法可以澄清这个问题,请告诉我。

6 个答案:

答案 0 :(得分:4)

您可以使用开关作为枚举:

public void whichWay (UserType type){
  switch (type) {
    case NORTH:
      peopleWhoGoNorth++;
      break;
    case SOUTH:
      peopleWhoGoSouth++;
      break;
    default:
      throw new IllegalArgumentException();
  }
}

答案 1 :(得分:3)

您需要使用==if (type == NORTH)

您还可以使用switch声明:

switch(type) {
  case NORTH: 
    peopleWhoGoNorth++;
    break;
  case SOUTH: 
    peopleWhoGoSouth++;
    break;
  default: // do nothing
}

答案 2 :(得分:2)

您只需将type与您要检查的类型进行比较即可。

public void whichWay(UserType type) {
    if (type == UserType.NORTH) {
        //Execute code
    }
    //Other types analog
}

或者您可以使用switch语句:

public void whichWay(UserType type) {
    switch (type) {
        case NORTH:
            //Execute code
            break;
        //Other types analog
        default:
    }
}

答案 3 :(得分:0)

我会说你在正确的轨道上。

只考虑方法"哪个":

public void whichWay(UserType type) {
    if(type == UserType.NORTH) { peopleWhoGoNorth++; }
    else if(type == UserType.SOUTH) { peopleWhoGoSouth++; }
}

答案 4 :(得分:0)

switchif-else已被涵盖,但您也可以使用Map来包含已经朝着特定方向前进的人数。

public enum UserType {
    NORTH, SOUTH, EAST, WEST
}

public class Example{
    private final Map<UserType,Integer> typeMap = new HashMap<>();

    public void whichWay(UserType type){
        int val = typeMap.getOrDefault(type,0);
        typeMap.put(type,val++);
    }
}

当然,您需要添加方法来获取这些值,以使其有用。

答案 5 :(得分:0)

另一种方法是使用an EnumMap

private final EnumMap<UserType, Integer> counter = new EnumMap<> (UserType.class);
{
  for (UserType u : UserType.values()) counter.put(u, 0);
}

public void whichWay (UserType type){
  counter.put(type, counter.get(type) + 1);
}

或者使用Java 8:

private final EnumMap<UserType, Integer> counter = new EnumMap<> (UserType.class);

public void whichWay (UserType type){
  counter.compute(type, (u, i) -> i == null ? 0 : i + 1);
}

(注意:这不是线程安全的)